2017-02-20 8 views
2

私のプロジェクトでパスワードフィールドに次の正規表現を使用しています。password()正規表現で特殊文字として使用するには、[] []を使用しますか?

/^(?=.*\d)(?=.*[[email protected]#$%^&*)(_+-:[}="`])(?=.*[a-z])(?=.*[A-Z]).{8,}$/ 

私の要件は、少なくとも 1アッパーケースに 1小文字 1ナンバー 1特殊文字を可能にすることです。

それは `〜@#$%^ & *)(_ +許可する必要があります - :!。。[} =」特殊文字を、私は他の文字を入力した場合、それは許してはならない

しかし、それは他の文字を許可されます以下のような|\など

私は正規表現で多くの知識を持っていない。IAMのは間違っている、私を助けてください。??

おかげでたくさんあなただけ置く許可したくないものは何でも。

答えて

3

問題は、あなたのキャラクターにだけ+後エスケープ-の配置であります中間にあり、+、すなわち0x2b:の間の範囲のように機能するクラス、すなわち0x3aである。このため、この範囲内のすべての文字が許可されています。

あなたは、文字クラスのか、このような開始時に終了する-を移動することができます。

/^(?=.*\d)(?=.*[[email protected]#$%^&*)(_+:[}="`-])(?=.*[a-z])(?=.*[A-Z])[[email protected]#$%^&*)(+:[}="`\w-]{8,}$/ 

また、重要な私は「として文字のセット許可し、最後にDOT(任意の文字)を変更することです上に示したように。 RegEx Demo

+2

Regexの良いデモと説明 – Adds

+1

良いデモは私を助けました。 –

+0

私はあなたの解決策を 'Gt%:_ = yh | \^5%3f'でもう一度試しました。それは' | \ <> 'などを許可しています。私はあなたの答えを確かに受け入れます。 –

2

それらを大括弧([])でハット記号(^)

例:

​​

これは、これらの文字を許可しません。

はこれを試してみてください:

Gt%:_=yh^|\5%3f 
2

あなたは正規表現固有の文字をエスケープする必要があります(?$、&、^、*、+、/、|、)、(、]、[、}、 {):

^(?=.*\d)(?=.*[\~\!\@\#\$\%\^\&\*\)\(\_\+\-\:\[\}\=\"\`])(?=.*[a-z])(?=.*[A-Z]).{8,}$ 

#、=、私は通常、念のために、すべての句読点を逃れるが、エスケープする必要はありません:、

+0

良い例として、正規表現固有の文字に関する情報です。 – Adds

+2

セットの中で、エスケープする必要のある ']'、 '-'、'^'のみ! –

+0

@ibrahimmahrir Regexインタプリタによって異なります。影響を受ける言語がわからないので、私はそれが 'Javascript'、' Perl'または 'BASH'のいずれかであると仮定しました。その場合、彼らは特定の文字を扱う方法が異なります。私のソリューションは、すべての言語のすべてのケースを処理します。 – SsJVasto

関連する問題