如何指定某个长度的正则表达式来禁止字符而不允许字符



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

我知道像[a-z]这样的字符类,但必须以这种方式指定所有可能性似乎很痛苦:[2-9~!@#$%^&*()b-df-hj-np-t...]

例如:

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

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

  • 如果我通过一个字符串XYZ2223-它应该通过.

提前感谢!

所以应该是这样的:

^[^aeiouAEIOU01]{7}$

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

根据英语对元音的定义,其他文化可能对元音的构成有不同的看法。

根据您的测试数据,结果为:

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

这是最简单的表达方式:

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

术语(?i)的意思是"忽略大小写",它避免了同时键入上元音和下元音。

最新更新