48

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

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

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

4

6 に答える 6

72

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

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

そうすれば、禁止したい個々のキャラクターを削除できます。

また、文字列のプレースマーカーの開始と終了を含める必要があります^と$

アップデート:

elclanrsが理解したように(そして私たちの残りは最初は理解していませんでした)、パターンで許可される必要がある唯一の特殊文字は&-._です。

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

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

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

/^[\w&.\-]*$/
于 2012-12-19T06:27:08.573 に答える
17

さて、既存のキャラクタークラスにそれらを追加してみませんか?

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

文字列がそれらの文字だけで構成されているかどうかを確認する必要がある場合は、式もアンカーする必要があります。

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
}
于 2012-12-19T06:25:45.073 に答える
13

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

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

また、を使用することができますtest

if ( pattern.test( qry ) ) {
  // valid
}
于 2012-12-19T06:33:40.327 に答える
1
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
于 2019-01-16T11:05:41.050 に答える
1

私はこれらをたくさん試しましたが、どれも私のすべてのテストで機能しませんでした。だから私はこれを見つけました:

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9])(?!.*\s).{8,15}$

このソースから:https ://www.w3resource.com/javascript/form/password-validation.php

于 2020-10-04T09:48:39.377 に答える
0

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

   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_ .]*)*$
于 2017-02-08T04:11:22.833 に答える