我有两个正则表达式,用于验证科罗拉多州驾照的格式。
[0-9]{2}[-][0-9]{3}[-][0-9]{4}
and
[0-9]{9}
我们需要允许只有9个数字,但用户可以输入123456789或12-345-6789。我能否将它们合并为一个?类似于正则表达式的条件语句吗?目前,我只是枚举所有可用格式,并在匹配一个后退出。我可以在比较之前去掉连字符并仅使用
[0-9]{9}
,但这样我就学不到任何新东西了。对于一个简单的合并操作,
(?:[0-9]{2}[-][0-9]{3}[-][0-9]{4}|[0-9]{9})
或者合并逻辑(允许一个位置有破折号而另一个位置没有破折号,这可能不是所期望的),
[0-9]{2}-?[0-9]{3}-?[0-9]{4}
(你第一个正则表达式中连字符周围的括号没有任何作用。)或者将逻辑合并,以便如果有一个连字符则需要两个。(?:\d{2}-\d{3}-|\d{5})\d{4}
(你的[0-9]
也可以用\d
替换。)
\d{2}(-?)\d{3}\1\d{4}
一个简洁的版本,可以允许使用破折号或不使用破折号:
```\d{2}(-?)\d{3}\1\d{4}
我认为这应该可以工作:
\d{2}-?\d{3}-?\d{4}