检查字符串是否与JS中的正则表达式匹配


750

我想使用JavaScript(可以与jQuery一起使用)进行一些客户端验证,以检查字符串是否与正则表达式匹配:

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

理想情况下,它将是一个返回true或false的表达式。

我是JavaScript新手,match()我需要做什么?似乎要检查字符串的一部分是否匹配正则表达式,而不是整个字符串。


您是否要完全匹配,还是只需要字符串包含匹配的子字符串?
Kerrek SB 2011年

1
完全匹配-不匹配的子字符串。
理查德

Answers:


1194

使用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 '16

8
@PedroD ^表示开始或开始于
Nagaraju

那么,您将如何做相反的事情?“不是从...开始的”
PedroD


3
@stackdave也许您正在使用Java,而不是JavaScript?
sfarbota


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%。
阿肯什

@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-9可以将aaaaaaaaaaaaaaaaaaaaaaaa降低至\d。哦,捕获小组不是必需的。
mickmackusa

1

我建议使用execute方法,如果不存在匹配项,则返回null,否则返回有用的对象。

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.