Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 Regex-使用两种不同的模式验证帐号_Javascript_Regex - Fatal编程技术网

Javascript Regex-使用两种不同的模式验证帐号

Javascript Regex-使用两种不同的模式验证帐号,javascript,regex,Javascript,Regex,我需要验证一个帐号。 一个有效的数字可以是一个由11个数字组成的序列,也可以是由连字符分隔的3组数字(2个数字-3个数字-6个数字) 我试过这个: /^([0-9]{11})|([0-9]{2}-[0-9]{3}-[0-9]{6})$/ 但它只适用于第二条规则。第一条规则不起作用,因为它允许数字超过11位 这是我在js函数中使用正则表达式的方式: var re = /^([0-9]{11})|([0-9]{2}-[0-9]{3}-[0-9]{6})$/; if (re.te

我需要验证一个帐号。 一个有效的数字可以是一个由11个数字组成的序列,也可以是由连字符分隔的3组数字(2个数字-3个数字-6个数字)

我试过这个:

/^([0-9]{11})|([0-9]{2}-[0-9]{3}-[0-9]{6})$/
但它只适用于第二条规则。第一条规则不起作用,因为它允许数字超过11位

这是我在js函数中使用正则表达式的方式:

 var re = /^([0-9]{11})|([0-9]{2}-[0-9]{3}-[0-9]{6})$/;
         if (re.test(txtNumber.value)==true) {
             return 1;
         }
         else {
             alert("Invalid Account Number");
             return 0;
         }
如有任何建议或指导,将不胜感激

有效数字:

12345678912(11位)

12-345-678912(用连字符分隔的11位数字)

无效数字:

1223(少于11位)

111111(超过11位)


123-23-678912(11位,但没有正确分开,它应该是2位-3位-6位)

由于
|
正则表达式运算符优先级最低,它应该这样写:

/^(?:[0-9]{11}|[0-9]{2}-[0-9]{3}-[0-9]{6})$/
。。。所以交替模式被绑定到字符串的开头和结尾

在代码中,模式会检查字符串开头的11位数字序列,或结尾的“两位、连字符、三位、连字符、六位”序列,但不会真正将规则绑定到两端。这很容易证明:

var patt = /^([0-9]{11})|([0-9]{2}-[0-9]{3}-[0-9]{6})$/;
patt.test('acdbdfdsfsf22-333-666666'); // true
作为旁注,由于您不需要使用该分组表达式捕获任何内容,因此我在前面加了
?:
。实际上,它还可以进一步优化:

/^[0-9]{2}(?:[0-9]{9}|-[0-9]{3}-[0-9]{6})$/
。。。你的选择越少越好。但在这种情况下,我想这真的没什么大不了的


简而言之,这两种模式可以说明问题:

/^a|b$/
这读作“匹配字符串开头的
a
,或字符串结尾的
b

/^(?:a|b)$/

这读作“匹配字符串的
开头
,后跟
a
b
,后跟
字符串的结尾
”。

这不是重复,因为我不是在问如何用XX-XXX-XXXXXX模式验证数字。我想问的是,为什么我的正则表达式中只有一条规则有效,而另一条则无效。不过,对于看到这个问题的未来用户来说,这仍然是一个很好的信息,所以我将保留它。你没有被关闭的危险。也许我没有解释清楚:(一个有效的数字可以是一个11位数的序列(123456789123)或者一个两位数的序列,连字符,三位数,连字符,六位数(12-123-123456)这与我所说的有何矛盾?请检查我回答中的示例:您给出的规则实际上都不够严格,因为它们(因为
|
优先级)不适用于整个字符串。我的错。它应该是“12345678912”。我需要做什么才能使这两条规则适用于整个字符串,而不仅仅是乞讨或结束。对不起,但是-不,它不适用。请使用此模式。