9

特定の特殊文字を許可しない次の正規表現があります。

if (testString.match(/[`~,.<>;':"\/\[\]\|{}()-=_+]/)){    
    alert("password not valid");
}
else
{
    alert("password valid");
}

これは機能しています。この正規表現は、括弧内に特殊文字が含まれていない場合、パスワードを受け入れます(~,.<>;':"\/\[\]\|{}()-=_+)

ここでの私の問題は、奇妙な数字を入力できないことです。

ここで見逃したものはありますか?前もって感謝します!

以下にサンプルを示します。

jsフィドル

4

1 に答える 1

11

そこには文字範囲があります。これには、と)-=の間のすべての ASCII 文字(数字を含む) が含まれます。をクラスの最後に移動するか、エスケープします。)=-

/[`~,.<>;':"\/\[\]\|{}()=_+-]/

また、これらすべての文字をエスケープする必要はありません。

/[`~,.<>;':"/[\]|{}()=_+-]/

あなたの場合、おそらくtest代わりに使用するだけで十分であることに注意してくださいmatch

if (/[`~,.<>;':"/[\]|{}()=_+-]/.test(testString))){
    ...

testブール値を返します(必要なのはこれだけです)が、matchすべてのキャプチャグループを含む配列を返します(とにかく破棄します)。

Daren Thomas がコメントで指摘しているように、許可する文字を決定する必要があることに注意してください。現在のアプローチでは、あらゆる種類の奇妙な Unicode 文字を処理していないため、_. ホワイトリストを作成するには、文字クラスと条件の両方を反転するだけです。

if (!/[^a-zA-Z0-9]/.test(testString)) {
   ...

そして、許可したいすべての文字を含めます。

于 2013-08-23T08:17:24.683 に答える