ASP.NETページに、次の検証が必要な入力ボックスがあります。
英数字で、少なくとも1文字である必要があります(つまり、すべての数字にすることはできません)。
ASP.NETページに、次の検証が必要な入力ボックスがあります。
英数字で、少なくとも1文字である必要があります(つまり、すべての数字にすることはできません)。
^\d*[a-zA-Z][a-zA-Z0-9]*$
基本的にこれは次のことを意味します。
いくつかのテストを試してみると、少なくとも1つの英数字以外のASCII文字が必要な英数字のASCII文字列に合格することがわかります。
これの鍵\d*
は正面にあります。それがないと、正規表現ははるかに厄介になります。
この質問に対するほとんどの答えは正しいですが、後でルールを変更したい場合に(場合によっては)より柔軟性を提供する代替手段があります。
^(?=.*[a-zA-Z].*)([a-zA-Z0-9]+)$
これは英数字の任意のシーケンスに一致しますが、最初のグループもシーケンス全体に一致する場合に限ります。これは、正規表現ではあまり知られていないトリックであり、非常に難しい検証の問題を処理できます。
たとえば、別の制約を追加する必要があるとします。文字列の長さは6〜12文字である必要があります。ここに投稿された明らかな解決策は機能しませんが、先読みのトリックを使用すると、正規表現は単純に次のようになります。
^(?=.*[a-zA-Z].*)([a-zA-Z0-9]{6,12})$
^[\p{L}\p{N}]*\p{L}[\p{L}\p{N}]*$
説明:
[\p{L}\p{N}]*
0個以上のUnicode文字または数字に一致します\p{L}
1文字に一致[\p{L}\p{N}]*
0個以上のUnicode文字または数字に一致します^
文字列を$
固定して、正規表現が文字列全体と一致するようにします。呼び出す正規表現マッチング関数によっては、これらを省略できる場合があります。結果:どこかに文字がなければならないことを除いて、任意の英数字の文字列を使用できます。
\p{L}
[A-Za-z]
アクセント記号と発音区別符号の有無にかかわらず、すべてのアルファベットのすべての文字が含まれることを除いて、に似ています。より多くのUnicode文字のセットを使用して、はるかに包括的です。その柔軟性を望まない場合は、代わりに[A-Za-z]
。単純にしたい場合は、\p{N}
これに置き換えることができる同様の注意が適用されます。[0-9]
詳細については、文字クラスに関するMSDNページを参照してください。
それほど派手でない非Unicodeバージョンは
^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$
^[0-9]*[A-Za-z][0-9A-Za-z]*$
あなたが求めていることを行う正規表現です。^と$は単語の最初と最後に一致して、他の文字を防ぎます。[0-9A-z]ブロックを\wに置き換えることもできますが、必要に応じて他の文字で拡張する方が簡単なので、より詳細な形式を使用することをお勧めします。
MSDNのチュートリアル( http://msdn.microsoft.com/en-us/library/ms998267.aspx)に従って、正規表現バリデーターをasp.netページに追加します。
^\w*[\p{L}]\w*$
これはそれほど難しいことではありません。[\p{L}]
正規表現は次のようになります。任意の数の単語文字(文字、数字、句読点(不要な場合があります))で始まり、1文字の文字(中央の部分)とそれに続く任意の数の単語を含む行に一致します。再び文字。
句読点を除外する場合は、より重い式が必要になります。
^[\p{L}\p{N}]*[\p{L}][\p{L}\p{N}]*$
また、Unicodeを気にしない場合は、退屈な式を使用できます。
^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$
^[0-9]*[a-zA-Z][a-zA-Z0-9]*$
することができます