Search code examples
javascriptregexvalidationwords

Regex - Allow capital letters just at the beginning of words


I have to check for capital letters to exist just at the beginning of words.

My regex now looks like this: /^([A-ZÁÉÚŐÓÜÖÍ]([a-záéúőóüöí]*\s?))+$/

It's at the words beginning works good, but if the problem not at the beginning of the word it's fails. For example: John JohnJ got validated.

What should i alternate in my regex to works well?


Solution

  • In your regex pattern the space is optional, allowing combinations like JJohn or JohnJ - the key is to make it required between words. There are two ways to do this:

    Roll out your pattern:

    /^[A-ZÁÉÚŐÓÜÖÍ][a-záéúőóüöí]*(?:\s[A-ZÁÉÚŐÓÜÖÍ][a-záéúőóüöí]*)*$/
    

    Or make the space in your pattern required, but alternatively allow it to be the end of line (this allows a trailing space though).

    /^(?:[A-ZÁÉÚŐÓÜÖÍ][a-záéúőóüöí]*(?:\s|$))+$/
    

    In both patterns I have removed some superfluous groups of your original and turned all groups into non-capturing ones.