Javascript test(value)在记录时返回true,但在if语句中返回false
我注意到我的代码有点奇怪。我有一个正则表达式来检查英国邮政编码,它使用捕获组,除非在if语句中,否则工作正常。要测试的代码位于一个validator类中,该类被传递一个HTML节点列表,其中包含表单中的所有字段 例如,当我在HTML输入字段的Javascript test(value)在记录时返回true,但在if语句中返回false,javascript,regex,validation,if-statement,textfield,Javascript,Regex,Validation,If Statement,Textfield,我注意到我的代码有点奇怪。我有一个正则表达式来检查英国邮政编码,它使用捕获组,除非在if语句中,否则工作正常。要测试的代码位于一个validator类中,该类被传递一个HTML节点列表,其中包含表单中的所有字段 例如,当我在HTML输入字段的模式标记中使用它时,它的行为与您预期的一样。就像我console.log(regex.test(field.value))时一样。然而,当我把它放到if语句中时,它似乎每次都失败了 正则表达式如下: /\b([a-zA-Z]{1,2}[0-9]{1,2}[a
模式
标记中使用它时,它的行为与您预期的一样。就像我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/
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;
}
}
}
输入字段如下所示:
<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" />
console.log检查返回true,但是if语句检查每次都返回false,我不明白为什么两个相同的检查会输出不同的结果,有人有什么建议吗?我猜我脑子里一定有什么事
谢谢
编辑以澄清:控制台日志的true
,但仍在按照文档执行if语句
与exec()一样(或与exec()结合使用),在同一全局正则表达式实例上多次调用test()将超过上一个实例
这就是为什么你第二次犯错的原因
试试这个:
var res = postcodeRegex.test(field.value);
console.log(res)
if(!res) {
根据文件
与exec()一样(或与exec()结合使用),在同一全局正则表达式实例上多次调用test()将超过上一个实例
这就是为什么你第二次犯错的原因
试试这个:
var res = postcodeRegex.test(field.value);
console.log(res)
if(!res) {
!true===false
如果控制台记录true
则不会执行if
语句中的代码。这就是问题所在,if语句仍然执行哦,我明白了,在这种情况下,问题在于@AthanasiosKataras所提到的。@Titus是的,当没有任何其他正则表达式的使用时,if语句似乎仍然失败。!true===false
如果控制台记录true
则不会执行if
语句中的代码。这就是问题所在,if语句仍然执行哦,我明白了,在这种情况下,问题是@AthanasiosKataras所提到的。@Titus是的,当没有任何其他正则表达式的使用时,它似乎仍然在if语句中失败。感谢您的输入,这与regex.lastIndex=0
的情况有关,对吗?更奇怪的是,即使我删除了控制台日志,测试在if语句中也返回false。因此,只使用log返回true,而只使用if语句返回false。我认为只有当regex设置为全局时才会出现这种情况(使用g
标志)@titus是的,这是我的看法,而不是使用g
标志。我试图通过完全删除日志并在日志和if语句之间插入regex.lastIndex=0
来否定/测试。然而,同样的结果——当if语句应该通过时,它会失败。很好的一个结果,就这样完成了。知道为什么需要这样做吗?感谢您的输入,这与regex.lastIndex=0
情况有关,对吗?更奇怪的是,即使我删除了控制台日志,测试在if语句中也返回false。因此,只使用log返回true,而只使用if语句返回false。我认为只有当regex设置为全局时才会出现这种情况(使用g
标志)@titus是的,这是我的看法,而不是使用g
标志。我试图通过完全删除日志并在日志和if语句之间插入regex.lastIndex=0
来否定/测试。然而,同样的结果——当if语句应该通过时,它会失败。很好的一个结果,就这样完成了。知道为什么需要这样做吗?