2

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

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

例如:

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

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

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

提前致谢!

4

2 回答 2

7

所以这将是这样的:

^[^aeiouAEIOU01]{7}$

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

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

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

pax> echo 'June2013' | egrep '^[^aeiouAEIOU01]{7}$'
pax> echo 'XYZ2003' | egrep '^[^aeiouAEIOU01]{7}$'
pax> echo 'XYZ2223' | egrep '^[^aeiouAEIOU01]{7}$'
XYZ2223
于 2013-06-26T05:56:27.790 回答
0

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

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

该术语的(?i)意思是“忽略大小写”,这避免了输入上下元音。

于 2013-07-01T05:06:38.353 回答