Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript test(value)在记录时返回true,但在if语句中返回false_Javascript_Regex_Validation_If Statement_Textfield - Fatal编程技术网

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

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

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

例如,当我在HTML输入字段的
模式
标记中使用它时,它的行为与您预期的一样。就像我
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语句应该通过时,它会失败。很好的一个结果,就这样完成了。知道为什么需要这样做吗?