Home > other >  Regexp one symbol exactly once through the whole string
Regexp one symbol exactly once through the whole string

Time:11-18

Already have a working regexp ^[a-zA-Z0-9 ]{1,11}$ but recently got an update in validation: there should be all old validations and new one symbol _ which should appear in whole string exactly once.

Strings must only match:

_name
name_
name_name

validation should fail for:

_name_
__name
etc.

tried a few approaches ^[a-zA-Z0-9_ ]{1,11}$ all characters may be _

^(?)[a-zA-Z0-9 ]{1,11}(?)$ validates

alpha_
_alpha
_alpha_ (shouldn't be valid)

but not this one:

 alpha_name

CodePudding user response:

You need to use

^(?=.{1,11}$)[a-zA-Z0-9 ]*(?:_[a-zA-Z0-9 ]*)?$

See the regex demo. Details:

  • ^ - start of string
  • (?=.{1,11}$) - a positive lookahead that requires one to eleven chars other than line break chars till end of string
  • [a-zA-Z0-9 ]* - zero or more letters, digits or spaces
  • (?:_[a-zA-Z0-9 ]*)? - an optional occurrence of _ and zero or more letters, digits or spaces
  • $ - end of string.

CodePudding user response:

Try this:

^(?=.{1,11}$)([a-zA-Z0-9 ]*)_?(?1)$

https://regex101.com/r/lCV5VT/1

  • Related