web-dev-qa-db-ja.com

文字列内の少なくとも1つの数字と1文字に一致する正規表現パターン

正規表現があります

/^([a-zA-Z0-9]+)$/

これは、英数字のみを許可しますが、数字のみまたは文字のみを挿入する場合も受け入れます。フィールドが英数字値のみを受け入れるように動作するようにしたいが、値には少なくとも1文字と1数字の両方が含まれている必要があります。

44
OM The Eternity

最初にテスト全体を適用してから、文字と数字の個別のテストを追加してみませんか?とにかく、1つの正規表現ですべてを実行したい場合は、ポジティブルックアヘッドを使用します。

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

このREは次のことを行います。

/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i

REの説明:

  • 次のいずれかに一致します。
    1. 少なくとも1つの数字、次に1つの文字または
    2. 少なくとも1文字、次に1つの数字plus
  • 残りの数字と文字

  • (?:...)参照されていないグループを作成します
  • /iignore-caseフラグなので、a-z == a-zA-Z
17
Rob W

他のレスポンダーがあなたに完全なソリューションを与えていることがわかります。正規表現の問題は、正規表現の維持/理解が困難な場合があることです。

より簡単な解決策は、既存の正規表現を保持してから、「少なくとも1つのアルファベット」と「少なくとも1つの数値」をテストするために2つの新しい正規表現を作成することです。

だから、これをテストしてください:-

/^([a-zA-Z0-9]+)$/

それからこれ:-

/\d/

それからこれ:-

/[A-Z]/i

文字列が3つの正規表現すべてに合格した場合、必要な答えが得られます。

15

このソリューションは、少なくとも1つの数字と少なくとも1つの文字を受け入れます。

[^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))
4
user2043372

受け入れられた答えは正しいですが、この正規表現は読みやすいと思います。

REGEX = "([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*"
4
Lonely Neuron

少し遅いかもしれませんが、これは私のREです:

/^(\w*(\d+[a-zA-Z]|[a-zA-Z]+\d)\w*)+$/

説明:

\w*->先頭に0以上の英数字

\d+[a-zA-Z]|[a-zA-Z]+\d->数字+文字OR文字+数字

\w*-> 0以上の英数字

理解できたと思います

3
Pablo Garcia

そして、否定的なチェックのアイデア。

/^(?!\d*$|[a-z]*$)[a-z\d]+$/i
  • ^(?!開始時 先読み 文字列がそうでない場合
  • \d*$には数字のみが含まれます|または
  • [a-z]*$には文字のみが含まれます
  • [a-z\d]+$は、$が終わるまで1つ以上の文字または数字と一致します。

このregex101デモをご覧ください

iフラグは大文字と小文字を区別しないマッチングをオンにしますa-za-zA-Zと一致します)

2
bobble bubble

受け入れられた回答は、特殊文字の入力が許可されていないため機能しません。

それは私にとって完璧に働いた。

^(?=.*[0-9])(?=.*[a-zA-Z])(?=\S+$).{6,20}$

  • 1桁必須
  • 1文字必須(下位または上位)
  • その他すべてのオプション

ありがとうございました。