6

一部のフィールドでいくつかの検証が必要なアプリケーションがあります。そのうちの 1 つは、2 語で構成される姓用です。私の正規表現では、これらのスペースを受け入れる必要があるため、多くのことを試しましたが、解決策が見つかりませんでした。

ここに私の正規表現があります:

@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ-\s]+$"

\s通常はスペース用ですが、機能せず、次のエラーメッセージが表示されました。

parsing "^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ-\s]+$" - Cannot include class \s in character range.

アイデアはありますか?

4

3 に答える 3

12

-は、 A と Z の間の任意の文字A-Zを記述するために使用するのと同じように、文字範囲を示します。あなたの正規表現は、エンジンが ñ と \s の間の任意の文字として解釈しようとするものを使用しますが、それ自体は空白文字の省略形にすぎないため、あまり意味がないことに気付きます。ñ-\s\s\s

それがエラーの原因です。

これを取り除くには、リテラル文字を含めたい場合は、常に文字クラス最後に置く必要があります。--

@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêçñ\s-]+$"

このようにして、エンジン\s-はそれが文字範囲ではなく、2 つの文字\s-別々であることを認識します。

-もう 1 つの方法は、文字をエスケープすることです。

@"^[a-zA-Zàéèêçñ\s][a-zA-Zàéèêç\-\s]+$"

そのため、エンジンñ\-\sは文字範囲としてではなく、任意の文字ñ-または\sとして解釈します。個人的には、できるだけ頻繁にエスケープしないように常に心がけていますが、私見では、それはごちゃごちゃして表現を不必要に長くしてしまうからです。

于 2013-04-18T08:09:08.913 に答える