小写的正则表达式而不是以固定字母开头

时间:2013-03-01 11:22:45

标签: regex

我尽力而为,让它发挥作用。
我只需要:
1.输入不应该以LOVE开头。
2.并非所有有效字符都必须相同。
3.必须至少有6个有效字符(大写和数字),最多为18个 其他允许的字符是空格,&符号(&),连字符,句号,固定符(/)。

例子:
允许ERTYUII 不允许afgTYULO(仅包含5个有效字符)
不允许使用LOVE12345WERT(以LOVE开头)。
asdERTY12 ^&安培;允许(至少6个有效字符(ERTY12上部和数字))
asAAertArtytyAtytytuArtyttyAyuyuyyA即使我们有6个有效的字符也不允许,但它们都是相同的。

请指教。

注意:我编辑了这个问题,因为我忘了错过我的任务中的一些要点:(。

1 个答案:

答案 0 :(得分:3)

注意:此正则表达式与原始问题中给出的描述相符。此后,编辑工作大幅改变了要求。

如果我理解正确的话,这个正则表达式应该有效:

/^(?!LOVE)[^a-z]+$/

这将匹配任何不以LOVE开头并且不包含小写字母的内容。

(注意:这假定为标准英文字母,仅限a-z)

<强>解释

^$锚定到字符串的开头和结尾。这会强制模式匹配整个字符串

(?!LOVE)是一个先见之明。它会检查字符串是否以LOVE开头,但它根本不会向前移动匹配位置。因此,正则表达式的其余部分仍然会检查整个字符串。

[^a-z]一个否定的字符类,匹配任何非小写字母的内容。

+与之前的事物匹配一次或多次。所以它匹配一个或多个不是小写字母的字符。

<强>更新

所以你也想要禁止任何只重复同一个角色的东西?这是一个匹配只包含相同字符的字符串的正则表达式:

/^(.)\1+$/

(.)匹配单个字符并将其放在第一个捕获组中。

\1+匹配一次或多次捕获组。

在这种情况下,因为它匹配您不想要的输入,您必须检查正则表达式是否与不匹配。

可以使用另一个预测将它组合到同一个正则表达式中:

 /^(?!LOVE)(?!^(.)\1+$)[^a-z]+$/

但是,当您为同一个正则表达式添加越来越多的条件时,它变得越来越难以理解。如果您必须进行多次检查,将它们分成不同的正则表达式通常更明智。