I have a Regex to allow alphanumeric, underscore and dots but not consecutive dots:
^(?!.*?[.]{2})[a-zA-Z0-9_.]+$
I also need to now allow dots in the first and last character of the string.
How can I do this?
You can use it like this with additional lookaheads:
^(?!\.)(?!.*\.$)(?!.*\.\.)[a-zA-Z0-9_.]+$
(?!\.) - don't allow . at start(?!.*\.\.) - don't allow 2 consecutive dots(?!.*\.$) - don't allow . at end^(?!\.)(?!.*\.$)(?!.*?\.\.)[\w.]+$\w is shortcut for [[a-zA-Z0-9_] in many regex flavors but not supported in awk, sed etc.(?!\d) to make the regex: ^(?!\d)(?!\.)(?!.*\.$)(?!.*?\.\.)[a-zA-Z0-9_.]+$. Thanks for the breakdown of each regex portion. :)preg_match("/^(?!\.)(?!.*\.$)(?!.*?\.\.)[a-zA-Z0-9_.]+$/", $number, $m); and them print $m[0]Re-write the regex as
^[a-zA-Z0-9_]+(?:\.[a-zA-Z0-9_]+)*$
or (in case your regex flavor is ECMAScript compliant where \w = [a-zA-Z0-9_]):
^\w+(?:\.\w+)*$
See the regex demo
Details:
^ - start of string[a-zA-Z0-9_]+ - 1 or more word chars (?:\.[a-zA-Z0-9_]+)* - zero or more sequences of:
\. - a dot[a-zA-Z0-9_]+ - 1 or more word chars$ - end of stringYou can try this:
^(?!.*\.\.)[A-Za-z0-9_.]+$
This will not allow any consecutive dots in the string and will also allow dot as first and last character