文字列がJSの正規表現と一致するかどうかを確認します


751

JavaScript(jQueryを使用可能)を使用して、クライアント側の検証を行い、文字列が正規表現に一致するかどうかを確認したい:

^([a-z0-9]{5,})$

理想的には、trueまたはfalseを返す式です。

私はJavaScript初心者ですが、match()必要なことはできますか?文字列全体ではなく、文字列の一部が正規表現と一致するかどうかをチェックするようです。


完全に一致させますか、それとも文字列一致する部分文字列が含まれているかどうかだけですか。
Kerrek SB、2011

1
完全一致-一致する部分文字列ではありません。
リチャード

回答:


1196

regex.test()必要なのがブール結果である場合に使用します。

console.log(/^([a-z0-9]{5,})$/.test('abc1')); // false

console.log(/^([a-z0-9]{5,})$/.test('abc12')); // true

console.log(/^([a-z0-9]{5,})$/.test('abc123')); // true

...そして()、キャプチャの必要がないので、正規表現からを削除できます。


1
正規表現の最初の^は何をしますか?
PedroD 2016

8
@PedroD ^は、開始または開始を意味します
Nagaraju

それで、あなたはどのように反対をしますか?「で始まらない...」
PedroD 2016


3
@stackdaveあなたはおそらくJavaScriptではなくJavaを使用していますか?
sfarbota

176

使用test()方法:

var term = "sample1";
var re = new RegExp("^([a-z0-9]{5,})$");
if (re.test(term)) {
    console.log("Valid");
} else {
    console.log("Invalid");
}

3
のバージョンでRegExpは、変数値を正規表現文字列に挿入できることに注意してください。
Christophe Roussy

2
で、二重引用符を削除する必要がありましたnew RegExp("^([a-z0-9]{5,})$")それを動作させるために
ファクンドコロンビエ

98

あなたも使うことができますmatch()

if (str.match(/^([a-z0-9]{5,})$/)) {
    alert("match!");
}

しかしtest()、あなたがここを読むことができるので、より速いようです。

重要な違いmatch()test()

match()文字列でのみ機能しますが、test()整数でも機能します。

12345.match(/^([a-z0-9]{5,})$/); // ERROR
/^([a-z0-9]{5,})$/.test(12345);  // true
/^([a-z0-9]{5,})$/.test(null);   // false

// Better watch out for undefined values
/^([a-z0-9]{5,})$/.test(undefined); // true

数値を処理する理由は、数値が文字列に変換されるためです。これは、文字列が必要なときにパラメータとして指定されるためです。私はこの振る舞いに依存しないでしょう。これは、環境のtest()の実装によって異なります。(番号にmatchメンバーがないため、一致は失敗します)。正規表現(String(123)たとえば)で使用する場合は、数値を文字列に明示的に変換することをお勧めします。
Bronzdragon

ここでは一致を使用できますが、パフォーマンスを見るtestと、正規表現に一致する文字列を検証し、そこから部分文字列を抽出しない場合、30%パフォーマンスが向上します。
Akansh

@pmrotuleええ、しかしそれは試合の説明の前に言及されるべきです
アカンシュ

testとmatch(およびmatchAll)の最も重要な違いは、matchは一致するすべてのサブストリングのリストを返すようなものですが、testは存在するかどうかのみをチェックするということです。javascript.info/regexp-methods
Juan Lanus

50

/youregexp/.test(yourString)文字列が正規表現に一致するかどうかだけを知りたい場合に使用します。


8

これは特定のHTMLタグを探す例ですので/someregex/.test()、ブール値を返すのは明らかです。

if(/(span|h[0-6]|li|a)/i.test("h3")) alert('true');

6
 let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 let regexp = /[a-d]/gi;
 console.log(str.match(regexp));

2

あなたはこれを試すことができます、それは私にとってはうまくいきます。

 <input type="text"  onchange="CheckValidAmount(this.value)" name="amount" required>

 <script type="text/javascript">
    function CheckValidAmount(amount) {          
       var a = /^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/;
       if(amount.match(a)){
           alert("matches");
       }else{
        alert("does not match"); 
       }
    }
</script>


1

試す

 /^[a-z\d]{5,}$/.test(str)


2
このコードのみの回答はページにどのような新しい価値をもたらしますか?
mickmackusa

現在、これは(正規表現の単純化により)最短の解決策です
KamilKiełczewski19年

1
数年前に投稿されたパターンから1文字をシェービングします。欠伸。
mickmackusa

2
以前の回答の下にコメントを残すだけで、0-9aaaaaaaaaaaaaaaaaaaaaまで削減できます\d。ああ、キャプチャグループは必要ありません。
mickmackusa

1

一致が存在しない場合はnullを返すexecuteメソッドを使用することをお勧めします。それ以外の場合は、有用なオブジェクトを返します。

let case1 = /^([a-z0-9]{5,})$/.exec("abc1");
console.log(case1); //null

let case2 = /^([a-z0-9]{5,})$/.exec("pass3434");
console.log(case2); // ['pass3434', 'pass3434', index:0, input:'pass3434', groups: undefined]

0
const regExpStr = "^([a-z0-9]{5,})$"
const result = new RegExp(regExpStr, 'g').test("Your string") // here I have used 'g' which means global search
console.log(result) // true if it matched, false if it doesn't
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.