I am trying to complete a regex where:
- only 2 consecutive white spaces/hyphens/commas/dots/slashes are allowed.
- maximum of 5 digits (consecutive or non-consecutive ) are allowed.
- 3 or more consecutive letters are not allowed.
I have tried the below regex, it worked well for the first 2 points, still need to achieve the third point.
^(?=.{3,50}$)(?!.*(((\d{6}))|( {2})|(-{2})|(,{2})|(\.{2})|(\/{2})))([a-zA-Z0-9 \-,.\/]) $
I am using this regex to validate the address input from the user, I will be glad to modify it if there are any improvements or suggestions.
Time Square, Main Road, 2279 allowed
Time-Square, Main Road-2279 allowed
Time Square Main Road NOT allowed "double spaces"
Time Square, Main Road, 22798741313 NOT allowed
Time Square, Main Road.. NOT allowed
Time Square, Main Road// NOT allowed
Time Square Main Road,, NOT allowed
Time Square Main Road-- NOT allowed
------- NOT allowed
--// NOT allowed
--/ NOT allowed
ttttttttttttttttttttttttttt NOT allowed
-/- NOT allowed
-/- NOT allowed
.,. NOT allowed
,-, NOT allowed
/-/-/-/- NOT allowed
CodePudding user response:
You may use this regex with negative lookahead conditions:
^(?!.* )(?!.*[-,/.]{2})(?!.*(?:[^\d\n]*\d){6})(?!.*([a-zA-Z])\1\1).{3,50}$
Explanation:
^: Start(?!.* ): Don't allow 2 consecutive spaces(?!.*[-,/.]{2}): Don't allow repeat of these special characters(?!.*(?:[^\d\n]*\d){6}): Don't allow more than 5 digits(?!.*([a-zA-Z])\1\1): Don't allow 3 consecutive repeat of same letter.{3,50}: Match 3 to 50 of any characters$: End
