我有两个正则表达式,用于验证Colorado驱动程序的许可证格式.
[0-9]{2}[-][0-9]{3}[-][0-9]{4}
Run Code Online (Sandbox Code Playgroud)
和
[0-9]{9}
Run Code Online (Sandbox Code Playgroud)
我们只允许9位数,但用户可以自由输入123456789或12-345-6789.
有没有办法将这些结合成一个?像正则表达式的条件声明?现在我只是枚举所有可用的格式,一旦匹配就爆发.在进行比较之前我总是可以删除连字符并且只使用[0-9]{9}
,但后来我不会学到任何新东西.
cha*_*aos 12
对于直接组合,
(?:[0-9]{2}[-][0-9]{3}[-][0-9]{4}|[0-9]{9})
Run Code Online (Sandbox Code Playgroud)
或合并逻辑(允许破折号在一个位置而不是另一个,这可能是不可取的),
[0-9]{2}-?[0-9]{3}-?[0-9]{4}
Run Code Online (Sandbox Code Playgroud)
(第一个正则表达式中连字符周围的括号没有做任何事情.)
或者合并逻辑,以便如果存在连字符,则需要两个连字符,
(?:\d{2}-\d{3}-|\d{5})\d{4}
Run Code Online (Sandbox Code Playgroud)
(您的[0-9]
s也可以替换为\d
s.)
如果给出第一个连字符,则使用反向引用来匹配第二个连字符怎么样:
\d{2}(-?)\d{3}\1\d{4}
Run Code Online (Sandbox Code Playgroud)
虽然我从来没有在Java中使用正则表达式,所以如果支持它,语法可能会有所不同.我刚刚在Ruby中试过这个.
归档时间: |
|
查看次数: |
1955 次 |
最近记录: |