javascript - Regex which accepts alphanumerics only, except for one hyphen in the middle -


i trying construct regular expression accepts alphanumerics ([a-za-z0-9]), except single hyphen (-) in middle of string, minimum of 9 characters , maximum of 20 characters.

i have verified following expression, accepts hyphen in middle.

/^[a-za-z0-9]+\-?[a-za-z0-9]+$/  

how can set minimum 9 , maximum 20 characters above regex? have used quantifiers + , ? in above expression.

how apply {9,20} above expression? there other suggestions expression?

/^[a-za-z0-9]+\-?[a-za-z0-9]+$/ 

can simplified to

/^[a-z0-9]+(?:-[a-z0-9]+)?$/i 

since if there no dash don't need more letters after it, , can use i flag match case-insensitively , avoid having reiterate both lower-case , upper-case letters.

then split problem 2 cases:

  1. 9-20 alpha numerics
  2. 10-21 characters, of alpha numerics except 1 dash

you can check second using positive lookahead like

/^(?=.{10,21}$)/i 

to check number of characters without consuming them.

combining these gives you

/^(?:[a-z0-9]{9,20}|(?=.{10,21}$)[a-z0-9]+-[a-z0-9]+)$/i 

Comments