好的,所以我有多个输入接收UUID代码。所以我使用jQuery中的.each函数逐个进行验证,并将输入验证为UUID代码。所以这是我到目前为止的代码:
function validateAll(){
var regex = /^[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}$/ig;
$('input.offer').each(function(x){
if($(this).val() !== ""){
console.log(x+" - "+$(this).val()+" - "+regex.test($(this).val()));
}
});
return true;
}
现在当我使用两个输入运行时:00000000-0000-0000-0000-000000000000这是我在控制台中得到的:
0 - 00000000-0000-0000-0000-000000000000 - true
1 - 00000000-0000-0000-0000-000000000000 - false
为什么regex.test()验证第一个而不是第二个?感谢。
答案 0 :(得分:4)
你需要在循环中引入正则表达式实例化 - 它不能再用另一个字符串重新测试。
function validateAll(){
$('input.offer').each(function(x) {
var regex = /^[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}$/ig;
if($(this).val() !== ""){
console.log(x + " - " + $(this).val() + " - " + regex.test($(this).val()));
}
});
return true;
}
第二次迭代失败的原因:
当[正则表达式]是全局正则表达式时。它将尝试匹配任何前一个字符串中最后一个匹配的索引。
答案 1 :(得分:2)
从正则表达式中删除g
修饰符。当您使用此修饰符重用regexp时,它会从最后一个匹配的索引开始新测试,而不是新字符串的开头。使用Regex::test
时,此修饰符没有用处,因为它只会告诉您regexp是否匹配任何地方 - 多个匹配是多余的。所以它应该是:
var regex = /^[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}$/i;
另外,我想知道为什么在使用a-z
修饰符使其不区分大小写时,将A-Z
和i
放在角色类中。