javascript - .each 错误中的 jQuery 正则表达式测试

标签 javascript jquery regex

好的,所以我有多个接收 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 - 真

1 - 00000000-0000-0000-0000-000000000000 - 假

为什么 regex.test() 验证第一个而不是第二个?谢谢。

最佳答案

您需要将正则表达式实例化带入循环中 - 它不能针对另一个字符串进行重新测试。

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;
}

Example fiddle

第二次迭代失败的原因:

when [the regex] is a global regular expression. It will attempt to match from the index of the last match in any previous string.

文章:Be careful when reusing regex objects

关于javascript - .each 错误中的 jQuery 正则表达式测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19299228/

相关文章:

javascript - 使用 jquery 或 ajax 将值传递到另一个页面

regex - sed 尝试在搜索和替换中使用捕获组时前面的正则表达式无效

javascript - 匹配 "After"如果它后面没有一个 -ing 词

php - Notepad++::查找非特定格式的行

javascript 动画在分辨率较高的屏幕上出现延迟

javascript - 如何设计一个 JavaScript 类以干净的方式支持回调?

Javascript 全局与局部作用域

javascript - 单击事件触发但无法添加类

javascript - 如何使一个 Div 的位置(不是 child 或 parent )完全链接/依赖于另一个 Div 的位置?

javascript - AJAX之前preventDefault,表单仍然提交成功