正则表达式不允许连续点

时间:2016-11-21 11:17:26

标签: regex

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

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

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

我该怎么做?

3 个答案:

答案 0 :(得分:3)

您可以像这样使用额外的前瞻:

^(?!\.)(?!.*\.$)(?!.*?\.\.)[a-zA-Z0-9_.]+$
  • (?!\.) - 不要在开始时.
  • (?!.*?\.\.) - 不允许连续2个点
  • (?!.*\.$) - 不允许.结束

答案 1 :(得分:3)

将正则表达式重写为

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

或(如果您的正则表达式符合ECMAScript,其中\w = [a-zA-Z0-9_]):

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

请参阅regex demo

<强>详情:

  • ^ - 字符串开头
  • [a-zA-Z0-9_]+ - 一个或多个单词字符
  • (?:\.[a-zA-Z0-9_]+)* - 零个或多个序列:
    • \. - 一个点
    • [a-zA-Z0-9_]+ - 一个或多个单词字符
  • $ - 字符串结尾

答案 2 :(得分:0)

你可以试试这个:

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

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

Tried here

相关问题