我正在尝试使用正则表达式验证输入字段。用户可以输入一个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}$)
答案 0 :(得分:1)
您可以将此正则表达式与前瞻性交替使用:
^(?:\d{10}|(?=[\d-]{11}$)\d{2,4}-\d+)$
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}
-十一个字符(数字或破折号),$
-字符串的结尾
更新:(?(?=\d{2,4}-\d{6,8})^[\d-]{11}$|^\d{10}$)
这使用交替-如果满足上述先行要求,则将其与破折号匹配,如果我不匹配,则将其与模式^\d{10}$
匹配,该模式仅匹配十个数字。
答案 2 :(得分:-1)