26

ASP.NETページに、次の検証が必要な入力ボックスがあります。

英数字で、少なくとも1文字である必要があります(つまり、すべての数字にすることはできません)。

4

6 に答える 6

62
^\d*[a-zA-Z][a-zA-Z0-9]*$

基本的にこれは次のことを意味します。

  • 0個以上のASCII数字。
  • 1つのアルファベットASCII文字。
  • ゼロ個以上の英数字ASCII文字。

いくつかのテストを試してみると、少なくとも1つの英数字以外のASCII文字が必要な英数字のASCII文字列に合格することがわかります。

これの鍵\d*は正面にあります。それがないと、正規表現ははるかに厄介になります。

于 2009-06-27T02:33:50.607 に答える
24

この質問に対するほとんどの答えは正しいですが、後でルールを変更したい場合に(場合によっては)より柔軟性を提供する代替手段があります。

^(?=.*[a-zA-Z].*)([a-zA-Z0-9]+)$

これは英数字の任意のシーケンスに一致しますが、最初のグループもシーケンス全体に一致する場合に限ります。これは、正規表現ではあまり知られていないトリックであり、非常に難しい検証の問題を処理できます。

たとえば、別の制約を追加する必要があるとします。文字列の長さは6〜12文字である必要があります。ここに投稿された明らかな解決策は機能しませんが、先読みのトリックを使用すると、正規表現は単純に次のようになります。

^(?=.*[a-zA-Z].*)([a-zA-Z0-9]{6,12})$
于 2009-06-28T19:35:09.590 に答える
5
^[\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]*$
于 2009-06-27T02:35:22.867 に答える
2
^[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ページに追加します。

于 2009-06-27T02:29:33.393 に答える
1
^\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]*$
于 2009-06-27T02:31:00.050 に答える
0
^[0-9]*[a-zA-Z][a-zA-Z0-9]*$

することができます

  • 文字で終わる数字、
  • または文字で始まる英数字式
  • または、数字で始まり、その後に文字が続き、英数字の部分式で終わる英数字式
于 2009-06-27T02:52:08.653 に答える