Regex.test(value) 在记录时返回 true,但在 if 语句中返回 false

Mak*_*ffs 2 javascript regex validation if-statement textfield

我注意到我的代码有些奇怪。我有一个正则表达式来检查英国邮政编码,它使用捕获组并且工作正常,除非在 if 语句中。要测试的代码位于验证器类中,该验证器类传递一个包含表单中所有字段的 HTML 节点列表。

例如,当我在patternHTML 输入字段的标签内使用它时,它的行为正如您所期望的那样。正如当我console.log(regex.test(field.value)). 然而,当我将它放入 if 语句中时,它似乎每次都会失败。

正则表达式如下:

/\b([a-zA-Z]{1,2}[0-9]{1,2}[a-zA-Z]?){1}( |-)?([0-9]{1,2}[a-zA-Z]{1,2}){1}\b/
Run Code Online (Sandbox Code Playgroud)

输入字段如下:

<input required pattern="\b([a-zA-Z]{1,2}[0-9]{1,2}[a-zA-Z]?){1}( |-)?([0-9]{1,2}[a-zA-Z]{1,2}){1}\b" inputmode="text" class="form-field" type="text" name="postcode" id="contactPostcode" placeholder="Postcode eg NW2 8BZ" />
Run Code Online (Sandbox Code Playgroud)

测试它的代码如下:

validate(fields)

// ... omitted ... //

let errors = [];

const postcodeRegex = /\b([a-zA-Z]{1,2}[0-9]{1,2}[a-zA-Z]?){1}( |-)?([0-9]{1,2}[a-zA-Z]{1,2}){1}\b/;

postcodeRegex.lastIndex = 0;

for (let field of fields) {

    if(field.name === 'postcode') {
        console.log(postcodeRegex.test(field.value))
        if(!postcodeRegex.test(field.value)) {
            errors.push({
                field: field.getAttribute('name'),
                error: 'Illegal character detected'
            });
            continue;
        }
    }

}

Run Code Online (Sandbox Code Playgroud)

console.log 检查返回 true,但是 if 语句检查每次都返回 false,我不明白为什么两个相同的检查会输出不同的结果,有人有任何建议吗?我猜我脑子里有什么事情。

谢谢

编辑以澄清:控制台日志true,但 if 语句仍在执行

Ath*_*ras 5

根据文档 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test

与 exec() (或与其组合)一样,在同一个全局正则表达式实例上多次调用 test() 将超过前一个

所以这就是为什么你第二次会犯错。

尝试这个:

var res = postcodeRegex.test(field.value);
console.log(res)
        if(!res) {
Run Code Online (Sandbox Code Playgroud)