I allow only one hyphen (-) in regex

后端 未结 5 451
猫巷女王i
猫巷女王i 2020-12-18 17:27

I have a text box where i get the last name of user. How do I allow only one hyphen (-) in a regular expression?

^([a-z A-Z]*-){1}[a-z A-Z]*$
相关标签:
5条回答
  • 2020-12-18 17:51

    you can use negative lookahead to reject strings having more than one hyphen:

    ^(?![^-]+-[^-]+-)[a-zA-Z- ]+$
    

    Matched demo on debuggex.

    Another Matched demo on debuggex.

    Not Matched Demo demo on debuggex.

    0 讨论(0)
  • 2020-12-18 17:54

    Your regular expression allow exactly one -. but I assume that you want to mach "Smith", "Smith-Kennedy", but not "Smith-", to do this you just must move the hyphen to the second group:

    ^[a-z A-Z]+(-[a-z A-Z]+)?$
    

    BTW, in almost all cases when * is used + is the better solution.

    0 讨论(0)
  • 2020-12-18 18:01

    I am assuming you want up to 1 hyphen. If so, the regex you want is

    ^[a-z A-Z]*-?[a-z A-Z]*$
    

    You can visualize it on www.debuggex.com.

    0 讨论(0)
  • 2020-12-18 18:12

    A problem with your regex is that it forces the user to put a -. You can use ? to make it optional :

    ^[a-z A-Z]*\-?[a-zA-Z]*$
    
    0 讨论(0)
  • 2020-12-18 18:13

    If it matches .*-.*-, then you have more than one hyphen and such string should not be accepted

    0 讨论(0)
提交回复
热议问题