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.

Richard
sumber
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.

pengguna113716
sumber
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");
}
Abhijeet Kasurde
sumber
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
pmrotule
sumber
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.

pengguna278064
sumber
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');
pengguna2449231
sumber
6
 let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 let regexp = /[a-d]/gi;
 console.log(str.match(regexp));
Eysun
sumber
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>
Tongi
sumber
1

silakan coba bunga ini:

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

benar

Jaber Alshami
sumber
1

mencoba

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

Kamil Kiełczewski
sumber
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]
Juan Navarrete
sumber
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
Geetanshu Gulati
sumber