zoom_pat277
zoom_pat277

Reputation: 1224

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, 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

Answers (3)

Epiphany
Epiphany

Reputation: 1894

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.

Upvotes: 4

camster
camster

Reputation: 666

More compact version is [\w'-]+

Upvotes: 0

kennytm
kennytm

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

Related Questions