Regular expression to match a name
I am trying to write a regular expression in Javascript to match a name field, where the only allowed values are letters, ap开发者_StackOverflowostrophes and hyphens. For example, the following names should be matched:
jhon's
avat-ar
Josh
Could someone please help me construct such a regex?
Yes.
^[a-zA-Z'-]+$
Here,
^
means start of the string, and$
means end of the string.[…]
is a character class which anything inside it will be matched.x+
means the pattern before it can be repeated once or more.
Inside the character class,
a-z
andA-Z
are the lower and upper case alphabets,'
is the apostrophe, and-
is the hyphen. The hyphen must appear at the beginning or the end to avoid confusion with the range separator as ina-z
.
Note that this class won't match international characters e.g. ä. You have to include them separately e.g.
^[-'a-zA-ZÀ-ÖØ-öø-ſ]+$
A compact version for the UTF-8 world that will match international letters and numbers.
/^[\p{L}\p{N}*-]+$/u
Explanation:
- [] => character class definition
- p{L} => matches any kind of letter character from any language
- p{N} => matches any kind of numeric character
- *- => matches asterisk and hyphen
- + => Quantifier — Matches between one to unlimited times (greedy)
- /u => Unicode modifier. Pattern strings are treated as UTF-16. Also causes escape sequences to match unicode characters.
Note, that if the hyphen is the last character in the class definition it does not need to be escaped. If the dash appears elsewhere in the class definition it needs to be escaped, as it will be seen as a range character rather then a hyphen.
More compact version is [\w'-]+
精彩评论