2016-11-21 10 views
3

Ich habe eine Regex alphanumerischen zu ermöglichen, unterstreicht und Punkte, aber nicht aufeinander folgende Punkte:Regex, die nicht aufeinander folgende Punkte erlaubt

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

Ich brauche auch jetzt Punkte in den ersten und letzten Zeichen des Strings zu ermöglichen.

Wie kann ich das tun?

Antwort

2

Sie können es so mit zusätzlichen Lookaheads verwenden:

^(?!\.)(?!.*\.$)(?!.*?\.\.)[a-zA-Z0-9_.]+$ 
  • (?!\.) - nicht . beim Start
  • (?!.*?\.\.) erlauben es - nicht zwei aufeinander folgende Punkte
  • (?!.*\.$) erlauben - don 't erlauben . am Ende
+0

wollen damit nur darauf hinweisen, dass dies kürzer geschrieben werden wie '^ (?! \.) (?!. * \. $) (?!. *? \. \.) [\ w.] + $' – nozzleman

+0

Ja, in der Tat ist '\ w' Abkürzung für '[[a-zA-Z0-9_]' in vielen Regex-Varianten, aber nicht unterstützt in awk, sed usw. – anubhava

+0

@nozzleman: oder noch kürzer: '^ \ w + (\. \ w +) * $' (wie in meinem Antwort, aber mit einer einfangenden Gruppe). –

2

Re-schreiben die Regex als

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

oder (falls Ihr regex Geschmack ist ECMAScript-konform \w = [a-zA-Z0-9_]):

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

Siehe regex demo

Einzelheiten:

  • ^ - Beginn der Zeichenfolge
  • [a-zA-Z0-9_]+-1 oder mehr Wort Zeichen
  • (?:\.[a-zA-Z0-9_]+)* - null oder mehr Sequenzen von:
    • \. - ein Punkt
    • [a-zA-Z0-9_]+-1 oder mehr Wort Zeichen
  • $ - Ende der Zeichenfolge
0

Sie können dies versuchen:

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

Dies wird keine aufeinanderfolgenden Punkten in der Kette ermöglichen und wird auch Punkt als erste und letzte Zeichen

Tried here

Verwandte Themen