0

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

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

请指教。

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

4

1 回答 1

3

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

如果我理解正确,这个正则表达式应该可以工作:

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

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

(注意:这假设一个标准的英文字母,仅限 az)

解释:

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

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

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

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

更新:

因此,您还想禁止仅重复相同字符的任何内容?这是一个匹配仅包含相同字符的字符串的正则表达式:

/^(.)\1+$/

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

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

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

可以使用另一个前瞻将其组合在同一个正则表达式中:

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

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

于 2013-03-01T11:27:21.293 回答