C#の正規表現が1-(およびのみ1) - 特性文字列を一致させようとしているかどうかを確認するにはどうすればよいですか?
質問
たぶん、これは非常にまれな(または愚かな)質問ですが、アプリでそれが必要です。
C#正規表現が1文字の文字列を一致させようとしているかどうかを確認するにはどうすればよいですか?
つまり、ユーザーが1文字の文字列を検索できるようにします。ユーザーがマルチキャラクター文字列を検索しようとしている場合、ユーザーにエラーメッセージが表示されます。
私は自分自身を明確にしましたか?
ありがとう。
ピーター
PS:最終的な一致した文字列の長さを計算することについての答えを見ましたが、何らかの未知の理由で、答えはなくなりました。私はそれをしばらく考えていました、私はそれがちょっと遅くなるでしょうが、最終的な一致した文字列の長さを計算するのは大丈夫だと思います。しかし、元の質問は非常にまれで退屈です。
解決
複雑になる可能性のある正規表現を検証する代わりに、文字列全体ではなく単一文字にのみ適用できます。
これが不可能な場合は、正規表現の可能性を特定の機能に制限することをお勧めします。たとえば、ユーザーは、一致する文字または除外する文字のみを入力できます。次に、コードに正規表現を構築します。
例えば:
ABC
マッチ[ABC]
^ABC
マッチ[^ABC]
A-Z
マッチ[A-Z]
#
マッチ[0-9]
\w
マッチ\w
AB#x-z
マッチ[AB]|[0-9]|[x-z]|\w
- どのケースをサポートする必要がありますか?
これは、解析して検証するのがやや簡単です。
他のヒント
regexpはそうなるでしょう .{1}
ただし、これによりチャージが許可されます。あなたが英数字しか欲しいなら、あなたは使用することができます [a-z0-9]{1}
または速記 /w{1}
別のオプションは、ユーザーが入力フィールドに入力できるcharの数を制限するために。最大長を設定します。
さらに別のオプションは、フォーム入力フィールドを文字列ではなく文字列に保存することですが、エラーを防ぐためにこれを処理する必要があります。
MaxLengthを使用してCharに保存してみませんか。
あなたは無効なものを探すことができます *
, +
, {}
, ?
など、文字の数を数えます(平らにすることを忘れないでください []
1つのキャラクターとして)。
基本的に、あなたはあなたの正規表現を解析する必要があります。