如何指定一定长度的正则表达式,我想要禁止字符而不是允许它们?

时间:2013-06-26 05:52:58

标签: regex validation

我需要一个正则表达式,它将验证字符串的长度为7,不包含元音,数字0和数字1。

我知道像[a-z]这样的角色类,但是必须指明每种可能性似乎很痛苦:[2-9~!@#$%^&*()b-df-hj-np-t...]

例如:

  • 如果我传递一个字符串June2013 - 它应该失败,因为字符串的长度是8,它包含2个元音,数字0和1。

  • 如果我传递一个字符串XYZ2003 - 它应该失败,因为它包含0。

  • 如果我传递字符串XYZ2223 - 它应该通过。

提前致谢!

2 个答案:

答案 0 :(得分:8)

所以这就是这样的:

^[^aeiouAEIOU01]{7}$

^$锚点确保除了您指定的内容之外没有任何内容,字符类[^...]表示除列出的字符之外的任何字符,{7}表示其中的七个字符。

这遵循英语对元音的定义,其他文化可能对什么构成元音有不同的看法。

根据您的测试数据,结果如下:

pax> echo 'June2013' | egrep '^[^aeiouAEIOU01]{7}$'
pax> echo 'XYZ2003' | egrep '^[^aeiouAEIOU01]{7}$'
pax> echo 'XYZ2223' | egrep '^[^aeiouAEIOU01]{7}$'
XYZ2223

答案 1 :(得分:0)

这是表达它的最简洁方式:

(?i)^[^aeiou01]{7}$

术语(?i)表示“忽略大小写”,它可以避免输入上元音和下元音。