2016-11-21 1036 views
3

我有一个正则表达式,允许字母数字,下划线和点,但不连续点:正则表达式,不允许连续点

^(?!.*?[.]{2})[a-zA-Z0-9_.]+$ 

我还需要现在允许在字符串的第一个和最后一个字符点。

我该怎么做?

回答

2

你可以用另外的向前看符号像这样使用它:

^(?!\.)(?!.*\.$)(?!.*?\.\.)[a-zA-Z0-9_.]+$ 
  • (?!\.) - 不允许.在启动
  • (?!.*?\.\.) - 不允许连续2点
  • (?!.*\.$) - 唐不允许.结束
+0

只是想,这可以指出写得像'^(?!\。)(?!。* \。$)(?!。*。\。\。)[\ w。] + $' – nozzleman

+0

这样短小。确实'\ w'是快捷方式''[[a-zA-Z0-9_]'在许多正则表达式中,但在awk,sed等中不支持。 – anubhava

+0

@nozzleman:甚至更短:'^ \ w +(\。\ w +)* $'回答,但与一个捕获组)。 –

2

重新编写的正则表达式为

^[a-zA-Z0-9_]+(?:\.[a-zA-Z0-9_]+)*$ 

或者(如果您正则表达式的味道的ECMAScript标准的地方\w = [a-zA-Z0-9_]):

^\w+(?:\.\w+)*$ 

regex demo

详细

  • ^ - 串的开始
  • [a-zA-Z0-9_]+ - 1或多个单词字符
  • (?:\.[a-zA-Z0-9_]+)* - 零个或更多序列:
    • \. - 点
    • [a-zA-Z0-9_]+ - 1或多个单词字符
  • $ - 字符串末尾
0

你可以试试这个:

^(?!.*\.\.)[A-Za-z0-9_.]+$ 

这将不允许在字符串中的任何连续的点,也将使点作为第一个和最后一个字符

Tried here