Reputation: 1224
I am trying to write a regular expression in Javascript to match a name field, where the only allowed values are letters, apostrophes and hyphens. For example, the following names should be matched:
jhon's
avat-ar
Josh
Could someone please help me construct such a regex?
Upvotes: 7
Views: 36217
Reputation: 1894
A compact version for the UTF-8 world that will match international letters and numbers.
/^[\p{L}\p{N}*-]+$/u
Explanation:
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.
Upvotes: 4
Reputation: 523294
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
and A-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 in a-z
.Note that this class won't match international characters e.g. ä. You have to include them separately e.g.
^[-'a-zA-ZÀ-ÖØ-öø-ſ]+$
Upvotes: 13