web-dev-qa-db-ja.com

正規表現の特殊文字と文字の一致

文字列を検証しようとしています。文字列には数字と特殊文字&-._のみ。そのために、正規表現で試しました。

var pattern = /[a-zA-Z0-9&_\.-]/
var qry = 'abc&*';
if(qry.match(pattern)) {
    alert('valid');
}
else{
    alert('invalid');
}

上記のコードを使用している間、文字列abc&*は有効です。しかし、私の要件はこれを無効にすることです。すなわち、文字、数字、または特殊文字以外の文字&-._が来ると、文字列は無効と評価されるはずです。正規表現を使用してそれを行うにはどうすればよいですか?

29
Khaleel

許可された文字に追加しますが、-]/\などの一部をエスケープする必要があります

var pattern = /^[a-zA-Z0-9!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]*$/

これにより、許可しない個々のキャラクターを削除できます。

また、文字列プレースマーカーの開始と終了を含めたい^と$

更新:

Elclanrsが理解したように(そして最初は他の人も理解していなかったように)、パターンで許可される必要があるonly特殊文字は&-._です

/^[\w&.\-]+$/

[\ w]は[a-zA-Z0-9_]と同じです

ダッシュはリストの最初または最後にあるときにエスケープする必要はありませんが、他の文字が追加された場合に備えて、ダッシュを使用することを好みます。さらに、+は、リストされた文字の少なくとも1つが必要であることを意味します。ゼロでよい場合(つまり、空の値)、代わりに*に置き換えます:

/^[\w&.\-]*$/
48

さて、既存のキャラクタークラスに追加するだけではどうですか?

_var pattern = /[a-zA-Z0-9&._-]/
_

文字列がこれらの文字のみで構成されているかどうかを確認する必要がある場合、anchor式も必要です:

_var pattern = /^[a-zA-Z0-9&._-]+$/
_

追加された_^_および_$_は、それぞれ文字列の先頭と末尾に一致します。

文字、数字、またはアンダースコアのテストは、式を短縮する_\w_を使用して実行できます。

_var pattern = /^[\w&.-]+$/
_

Nathanからのコメントで述べたように、.match()の結果を使用していない場合(一致した配列を返す)、RegExp.test()を使用する方が良い単純なブール値:

_if (pattern.test(qry)) {
    // qry is non-empty and only contains letters, numbers or special characters.
}
_

更新2

質問を読み違えた場合、以下の3つの条件がすべて満たされているかどうかを確認します。

_if (/[a-zA-Z]/.test(qry) && /[0-9]/.test(qry) && /[&._-]/.test(qry)) {
   // qry contains at least one letter, one number and one special character
}
_
16
Ja͢ck

この正規表現を試してください:

/^[\w&.-]+$/

また、testを使用できます。

if ( pattern.test( qry ) ) {
  // valid
}
10
elclanrs
let pattern = /^(?=.*[0-9])(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9!@#$%^&*]{6,16}$/;

//following will give you the result as true(if the password contains Capital, small letter, number and special character) or false based on the string format

let reee =pattern .test("helLo123@");   //true as it contains all the above
1
Amrutha VS

このRegExを試してください:段落とアルファベットで使用する特殊文字のマッチング

   Javascript : /^[a-zA-Z]+(([\'\,\.\-_ \/)(:][a-zA-Z_ ])?[a-zA-Z_ .]*)*$/.test(str)

                .test(str) returns boolean value if matched true and not matched false

            c# :  ^[a-zA-Z]+(([\'\,\.\-_ \/)(:][a-zA-Z_ ])?[a-zA-Z_ .]*)*$
0