正規表現があります
/^([a-zA-Z0-9]+)$/
これは、英数字のみを許可しますが、数字のみまたは文字のみを挿入する場合も受け入れます。フィールドが英数字値のみを受け入れるように動作するようにしたいが、値には少なくとも1文字と1数字の両方が含まれている必要があります。
最初にテスト全体を適用してから、文字と数字の個別のテストを追加してみませんか?とにかく、1つの正規表現ですべてを実行したい場合は、ポジティブルックアヘッドを使用します。
/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/
このREは次のことを行います。
/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i
REの説明:
(?:...)
参照されていないグループを作成します/i
はignore-caseフラグなので、a-z
== a-zA-Z
。他のレスポンダーがあなたに完全なソリューションを与えていることがわかります。正規表現の問題は、正規表現の維持/理解が困難な場合があることです。
より簡単な解決策は、既存の正規表現を保持してから、「少なくとも1つのアルファベット」と「少なくとも1つの数値」をテストするために2つの新しい正規表現を作成することです。
だから、これをテストしてください:-
/^([a-zA-Z0-9]+)$/
それからこれ:-
/\d/
それからこれ:-
/[A-Z]/i
文字列が3つの正規表現すべてに合格した場合、必要な答えが得られます。
このソリューションは、少なくとも1つの数字と少なくとも1つの文字を受け入れます。
[^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))
受け入れられた答えは正しいですが、この正規表現は読みやすいと思います。
REGEX = "([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*"
少し遅いかもしれませんが、これは私のREです:
/^(\w*(\d+[a-zA-Z]|[a-zA-Z]+\d)\w*)+$/
説明:
\w*
->先頭に0以上の英数字
\d+[a-zA-Z]|[a-zA-Z]+\d
->数字+文字OR文字+数字
\w*
-> 0以上の英数字
理解できたと思います
そして、否定的なチェックのアイデア。
/^(?!\d*$|[a-z]*$)[a-z\d]+$/i
^(?!
開始時 先読み 文字列がそうでない場合\d*$
には数字のみが含まれます|
または[a-z]*$
には文字のみが含まれます[a-z\d]+$
は、$
が終わるまで1つ以上の文字または数字と一致します。( i
フラグは大文字と小文字を区別しないマッチングをオンにします :a-z
はa-zA-Z
と一致します)
受け入れられた回答は、特殊文字の入力が許可されていないため機能しません。
それは私にとって完璧に働いた。
^(?=.*[0-9])(?=.*[a-zA-Z])(?=\S+$).{6,20}$
ありがとうございました。