2012-03-09 11 views
0

私はmatchesに問題があります。私は、alphanumeric and special charactersの任意の組み合わせを含む可能性のある値を受け入れなければならないというフィールドを持っています。入力が1) combination of alphanumeric and special characters, and 2) alphanumericのときにうまく動作するコードがあります。しかし、入力に1) number and special characters ONLY without alphabet or 2) alphabet and special characters ONLY without numberの組み合わせが含まれていると、matchesにエラーが発生しました。私は何をしたかったことは最高の次の入力の組み合わせで動作matchesを作成することです:私はあなたの提案が必要英数字と特殊文字を含む入力の一致を書き込む方法

matches: /^(?=.*[0-9]+.*)(?=.*[a-zA-Z]+.*)[0-9a-zA-Z_\[\]\\\^\$\.\|\?\*\+\(\)[email protected]#%&-=]{8,}$/ 

1) alphabet+number 
2) alphabet+special character 
3) alphabet+number+special character 
4) number+special character 

は、これは私のコードです! ありがとう!

答えて

1

あなたの肯定先読みが存在することが[a-zA-Z]存在することが両方[0-9]を必要とするからです。

だけ少なくとも[0-9]の1[a-zA-Z]が存在することを指定する1つの先読み、これを減らしてみてください:さらに

matches: /^(?=.*[0-9a-zA-Z])[0-9a-zA-Z_\[\]\\\^\$\.\|\?\*\+\(\)[email protected]#%&-=]{8,}$/ 

、あなたは.*を変更することで、正規表現の効率を改善することができますあなたの先読みで[^0-9a-zA-Z]*:先読みはと一致します。最初は英数字ですが、不必要な検索を防止して停止します。

+0

ありがとうございました! – chemilleX3

0
/^(?=.*[a-zA-Z0-9]+.*)[_\[\]\\\^\$\.\|\?\*\+\(\)[email protected]#%&-=]{8,}$/ 
+0

英数字を期待しているので、最初に "。*"があるのはなぜか分かりません。だからあなたはそれらを削除することを選ぶかもしれません。 – kasavbere

+0

彼らは最初に英数字を期待していません - '。* [a-zA-Z0-9]'は文字列全体に少なくとも1つの*英数字が必要であることを意味します。 –

+0

あなたの知識をお寄せいただきありがとうございます! mathematical.coffeeの答えは完璧にうまくいきます! – chemilleX3

関連する問題