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 语句仍在执行
根据文档 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)