正则表达式只允许一次“&”和“ - ”

时间:2017-11-17 05:25:01

标签: javascript

我正在尝试这个正则表达式^[A-Za-z &-]+[A-Za-z]$

这允许这些字符串:

  1. abc && abc
  2. abc -- abc
  3. abc &&-- abc
  4. 我想将其限制为一次只允许一个&-,即abc & abc。 它应该允许&-,但不能同时允许fruits- apple & orange

1 个答案:

答案 0 :(得分:2)

仅允许&-

之一的简单答案

只需将&-移出其后面有+的字符类:

^[A-Za-z ]+[&-][A-Za-z ]+$

(我在最后添加了一个+并为最后一组添加了一个空格,因为你的例子在标点符号后面允许空格,在结尾处允许多个字母。)

这是一个更干净的版本,使用不区分大小写的标志:

/^[a-z ]+[&-][a-z ]+$/i

答案允许两者,但每次只有一次

我发布此帖后你edited your question pretty significantly,完全改变了意思。要允许同时使用 &-,但每次只有一次并且彼此不相邻,您必须获得更多创意,例如:

/^[a-z ]+([&-])[a-z ]+(?!\1)[&-][a-z ]+$/i

这允许第一次&-([&-])),但仅允许第二次使用的那个。我们使用否定前瞻组来执行此操作:(?!\1)[&-]。这是一个demo