正则表达式:10位,在3,4或5上带有破折号

时间:2019-03-18 07:53:49

标签: regex

我正在尝试使用正则表达式验证输入字段。用户可以输入一个10位数字,该数字可以在位置3,4或5上包含一个破折号。当我仅使用一个表达式时,它可以工作,但是我无法使其与or语句一起工作。 当然,这是修剪所有破折号的一种解决方案,但是我想这样做。

应允许的示例

0123456789
01-23456789
012-3456789
0123-456789

我认为应该起作用的

(^d{10}$)|
(^d{2}\-d{8}$)|
(^d{3}\-d{7}$)|
(^d{4}\-d{6}$)

3 个答案:

答案 0 :(得分:1)

您可以将此正则表达式与前瞻性交替使用:

^(?:\d{10}|(?=[\d-]{11}$)\d{2,4}-\d+)$

RegEx Demo

RegEx详细信息:

  • ^(?::从一个非捕获组开始
    • \d{10}:匹配所有10位数字
    • |:或
    • (?=[\d-]{11}$):确保总长度为11,包括-
    • \d{2,4}-\d+:确保-位于第三,第四或第五位置
  • )$:最后结束非捕获组

如下面Revo建议的,一个较短的版本可以是:

^(?=(?:-?\d){10}$)\d{2,4}-?\d+$

答案 1 :(得分:0)

尝试此模式(?=\d{2,4}-\d{6,8})^[\d-]{11}$

它使用正向前瞻:(?=\d{2,4}-\d{6,8})以确保遵循的条件是:

\d{2,4}-2个最多4位数字

--破折号

\d{6,8}-6至8位数字

这可以确保您在第2、3、4位有破折号。

如果满足,则匹配:^-字符串的开头,[\d-]{11}-十一个字符(数字或破折号),$-字符串的结尾

Demo

更新(?(?=\d{2,4}-\d{6,8})^[\d-]{11}$|^\d{10}$)

这使用交替-如果满足上述先行要求,则将其与破折号匹配,如果我不匹配,则将其与模式^\d{10}$匹配,该模式仅匹配十个数字。

答案 2 :(得分:-1)

您只是忘记在d前面加上反斜杠。这个正则表达式应该做到这一点:

'PageNumber'

在这里签出:https://regex101.com/r/Nyjvfh/2