当前位置: 首页 > 知识库问答 >
问题:

Regex-用两种不同的模式验证帐户号码

杨星纬
2023-03-14

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

我试过这个:

/^([0-9]{11})|([0-9]{2}-[0-9]{3}-[0-9]{6})$/

但是它只适用于第二条规则。第一条规则不起作用,因为它允许超过11位数的数字

这就是我在js函数中使用regex的方式:

 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位)

共有1个答案

颜宸
2023-03-14

因为|regex运算符优先级最低,所以应该这样写:

/^(?:[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)$/

其内容为“匹配字符串的开头,后跟ab,后跟字符串的结尾”。

 类似资料:
  • 假设我有两个不同的模型和表,分别名为和。 正如你所知laravel使用模型来管理身份验证。但是因为我有两个不同的模型,我想可以分别管理它们。 我使用laravel 5.4,我不知道如何能做到这一点。

  • 我正在尝试使用正则表达式和PHP进行用户名验证。要求是: < li >没有空格 < li >仅小写字母和数字 < li >除了(.)、(-)、(_)以及用户不能同时使用两个或多个特殊字符 < li >用户名不应以特殊字符开头 < li >最小长度6,最大长度25 这就是我到目前为止所做的

  • 我想要一个用于手机号码验证的正则表达式。regex模式必须只在开头接受,空格(或)只能在国家代码之后(仅一次)。国家代码后只允许有10位数字。国家代码应该是可选的。如果国家代码不存在,它应该只接受10位数字。Regex应该防止任何无效的数字,比如(或)。 正则表达式应该接受这样的数字 1 8087339090 91 8087339090 912 8087339090 8087339090 0808

  • 我随身携带一些信用卡号码,希望通过以下规则验证它们。 ►必须只包含数字(0-9) ► 它可以有4个一组的数字,由一个连字符“-”分隔 ► 它不能有4个或更多连续重复的数字 ►它可以包含没有任何空格的精确数字 输入: > 61234-567-8912-3456 4123356789123456 5133-3367-8912-3456 输出: > 有效的 无效(因为卡号没有分成4个相等的组) 有效 无

  • 我正在编制一份登记表。它具有以下要求: 可以包含大写字母、大写字母、数字和字符集 不能包含空格 长度从5个字符到16个字符 我会像这样检查弦。 现在有两个问题我可以进入空间,虽然我不应该。我可以使用列出的字符以外的字符。我怎么解决这个?

  • 问题内容: 我试图在Web应用程序中验证公司名称,并且使用此正则表达式模式 上述模式将拒绝值 10004 Estates Limited 但是如果我提出0-9,那么模式变成 然后就可以了。正则表达式和模式是新手,但我知道我应该使用更多它,因此我想对此进行澄清。谢谢。 问题答案: 是字符类中的一个特殊字符,因此是歧义的,可能会赋予和和含义,因此本质上是字符。 要在字符类中包含连字符减号,您必须将其转