次の条件に対して検証します。
- それはすべての特殊文字を許可します
- 少なくとも1つのアルファベットまたは英数字 が含まれている必要があります
- 特殊文字のみが機能しません
使用しました
/^\d*[a-zA-Z][a-zA-Z0-9]+/
すべてのシナリオで正常に機能していますが、特殊文字を入力する前に、2つの文字、数字、または2つの組み合わせが必要です。
例:
a!!@#$*()_
失敗しますが合格する必要がありますa1!@#$*()_
パス
正規表現の修正にご協力ください。
次の条件に対して検証します。
使用しました
/^\d*[a-zA-Z][a-zA-Z0-9]+/
すべてのシナリオで正常に機能していますが、特殊文字を入力する前に、2つの文字、数字、または2つの組み合わせが必要です。
例:
a!!@#$*()_
失敗しますが合格する必要があります
a1!@#$*()_
パス
正規表現の修正にご協力ください。
tl; dnr回答:
/^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/
説明:
正規表現で「AND」条件を表現する一般的な方法は、次のとおりです。
/
^
(?= pattern 1)
(?= pattern 2)
(?= pattern 3)
etc
/
基本的に、入力の開始(^
)は、残りが指定されたすべてのパターンに一致する場合にのみ受け入れます。そうしないと、式全体が失敗します。
あなたの例では、パターン1は「特殊文字」を含むすべてに一致することです。あなたのコメントから、あなたは印刷可能なASCII範囲を探しています。ASCII文字は[!-~]
であり、他に何も必要とせず(「国際文字」など)、空の文字列を許可しないため、最終的なパターンは次のようになります。
[!-~]+$
2番目のパターンは「少なくとも1つの英数字」であり、「他の任意の量、次に1つの数字または文字」と言い換えることができます。
.*[A-Za-z0-9]
すべてを一緒に入れて:
/^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/
いくつかのテスト:
re = /^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/
console.log(re.test("hi")) // true
console.log(re.test("a!!@#$*()_")) // true
console.log(re.test("~!!@#$*()_")) // false
console.log(re.test("π+1")) // false
console.log(re.test("")) // false
うまくいくようです!
正規表現には、英字の後に英数字が必要です。明らかに、最初の例はその条件に失敗し、2番目の例は合格します。
あなたの条件もまた、大きな重複があります。「少なくとも1つの英数字または英数字」が含まれている必要があると言うことは、単に「少なくとも1つの英数字」が含まれている必要があると言うことと同じです。この条件により、文字列をすべて特殊文字にすることはできないと言う必要もなくなります。そこにありますが、あなたはちょうど明確にしているかもしれません。必要な正規表現は非常に単純です。
/[a-zA-Z0-9]/.test(str)
どこでもstr
英数字を検索します。
/[a-zA-Z0-9]/
あなたの正規表現:
/[a-zA-Z0-9]/.test(string)
[編集]これは実際には@acheong87と同じ答えです...