正则表达式:不能以精确的位数开头

时间:2018-01-25 11:09:16

标签: regex

我必须匹配一组不以“3400”开头且必须完全为13位的数字。

到目前为止,这就是我所拥有的:

^(?:(?!3400).)*$

这使得它与一组不以“3400”开头的字符匹配;但是我如何施加13位数的限制?

1 个答案:

答案 0 :(得分:2)

^(?:(?!3400).)*$模式匹配一​​个字符串,该字符串由除了换行符之外的任何字符组成,0 +出现,不包含3400子字符串。

您所寻求的是匹配仅由13位数组成的字符串,而不是以某些自定义数字序列开头。

使用

^(?!3400])\d{13}$

匹配不以3400开头的13位数字符串。

您可以进一步自定义图案,例如同时避免使用

匹配以34003401开头的数字字符串
^(?!340[01])\d{13}$
       ^^^^

其中[01]是与01匹配的字符类。 ^(?!3400|3401)\d{13}$也是可能的,但最佳做法是,替代品不应在同一位置匹配(此处,它们都匹配340),这会影响性能,尤其是更长的模式和更多替代方案。