我糊涂了:
function is_valid(name) {
var regexp_name = /^(\d|\w)*$/gi;
return regexp_name.test(name);
}
Run Code Online (Sandbox Code Playgroud)
// Console
console.log(is_valid("Test"));
=> true
console.log(is_valid("Test"));
=> false
console.log(is_valid("Test"));
=> true
console.log(is_valid("Test"));
=> false
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
删除/g标志.
RegExp对象以某种方式重用.当/g标志存在时,正则表达式引擎将从先前匹配的位置开始,直到消耗掉整个字符串.
1st call: Test
^
after 1st call: Test (found "Test")
^
2nd call: Test
^
after 2nd call Test (found nothing, reset)
^
Run Code Online (Sandbox Code Playgroud)
BTW,\w相当于[0-9a-zA-Z_]Javascript.因此,\d|和/i标志是多余的.而且由于你没有使用捕获的组,所以没有必要保留(…).以下就足够了:
var regexp_name = /^\w*$/;
Run Code Online (Sandbox Code Playgroud)