Periksa apakah string cocok dengan regex di JS


752

Saya ingin menggunakan JavaScript (bisa dengan jQuery) untuk melakukan validasi sisi klien untuk memeriksa apakah string cocok dengan regex:

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

Idealnya itu adalah ekspresi yang mengembalikan benar atau salah.

Saya seorang pemula JavaScript, apakah match()melakukan apa yang saya butuhkan? Tampaknya untuk memeriksa apakah bagian dari string cocok dengan regex, bukan semuanya.


Apakah Anda ingin kecocokan lengkap, atau hanya apakah string berisi substring yang cocok?
Kerrek SB

1
Pencocokan lengkap - bukan substring yang cocok.
Richard

Jawaban:


1196

Gunakan regex.test()jika semua yang Anda inginkan adalah hasil boolean:

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

... dan Anda dapat menghapus ()dari regexp karena Anda tidak perlu ditangkap.


1
Apa yang dilakukan ^ awal di regex di sana?
PedroD

8
@PedroD ^ menyiratkan mulai atau mulai dengan
Nagaraju

Jadi bagaimana Anda melakukan yang sebaliknya? "tidak dimulai dengan ..."
PedroD


3
@stackdave Anda mungkin bekerja dengan Java, bukan JavaScript?
sfarbota

176

Gunakan test()metode:

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

3
Perhatikan bahwa versi dengan RegExpmemungkinkan untuk menyuntikkan nilai variabel ke string regex.
Christophe Roussy

2
harus menghapus tanda kutip ganda new RegExp("^([a-z0-9]{5,})$")untuk membuatnya berfungsi
Facundo Colombier

98

Anda dapat menggunakan match()juga:

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

Namun test()sepertinya lebih cepat seperti yang Anda baca di sini .

Perbedaan penting antara match()dan test():

match()hanya bekerja dengan string, tetapi test()juga bekerja dengan bilangan bulat.

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

Alasan ia bekerja dengan angka adalah karena angka itu dipaksa menjadi string, karena itu diberikan sebagai parameter ketika itu mengharapkan string. Saya tidak akan bergantung pada perilaku ini. Itu tergantung pada implementasi pengujian lingkungan Anda (). (Pertandingan gagal karena angka tidak memiliki matchanggota). Saya akan merekomendasikan secara eksplisit mengkonversi nomor Anda ke string jika Anda ingin menggunakannya dengan regex ( String(123)misalnya).
Bronzdragon

Pertandingan dapat digunakan di sini, tetapi jika Anda melihat kinerjanya, testberkinerja 30% lebih baik ketika kami hanya ingin memvalidasi string agar cocok dengan regex dan tidak mengekstraksi substring darinya.
Akansh

@pmrotule Ya, tetapi harus disebutkan sebelum deskripsi pertandingan.
Akansh

Perbedaan yang paling signifikan antara tes dan pertandingan (dan matchAll) adalah bahwa pertandingan melakukan hal-hal seperti mengembalikan daftar semua sub-string yang cocok, sementara tes hanya memeriksa jika ada. Periksa metode regex di javascript.info/regexp-methods
Juan Lanus

50

Gunakan /youregexp/.test(yourString)jika Anda hanya ingin tahu apakah string Anda cocok dengan regexp.


8

Berikut adalah contoh yang mencari tag HTML tertentu sehingga jelas yang /someregex/.test()mengembalikan boolean:

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

Anda dapat mencoba ini, ini berhasil untuk saya.

 <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

silakan coba bunga ini:

/^[a-z0-9\_\.\-]{2,20}\@[a-z0-9\_\-]{2,20}\.[a-z]{2,9}$/.test('abc@abc.abc');

benar


1

mencoba

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


2
Nilai baru apa yang diberikan jawaban khusus kode ini ke halaman?
mickmackusa

saat ini merupakan solusi terpendek (karena penyederhanaan regexp)
Kamil Kiełczewski

1
Mencukur 1 karakter dari pola yang diposting tahun lalu. Menguap.
mickmackusa

2
Tinggalkan komentar di bawah jawaban sebelumnya untuk menyatakan bahwa 0-9aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaat semuapagi malam itu \d? Oh, dan kelompok penangkap tidak perlu.
mickmackusa

1

Saya akan merekomendasikan menggunakan metode eksekusi yang mengembalikan null jika tidak ada kecocokan jika tidak mengembalikan objek bermanfaat.

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.