2016-11-21 159 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