Jordan Magnuson
Jordan Magnuson

Reputation: 884

PHP: Check alphabetic characters from any latin-based language?

Using PHP I want to check that a string contains only alphabetic characters (I do not want to allow any numerals or special characters like !@#$%^&*). ctype_alpha() would seem great for this purpose.

The problem is that I want to allow accented letters, such as found in French, etc. For example, I want to allow "Lórien".

I know that ctype_alpha() can be used with set_locale(), but that still seems too limited for this use case, since I want to allow characters from all latin-based languages.

Any ideas how best to accomplish this?


Note: The solution posted at How can I detect non-western characters? is great for explicitly detecting non-Latin characters, but it allows special characters and white space, which I do not want to allow:

preg_match('/[^\\p{Common}\\p{Latin}]/u', $string)

I want something that would work like this, but limit the allowed characters to alphabetic characters (so no special characters like !@#$%^&).

Upvotes: 9

Views: 13548

Answers (2)

Bryan Elliott
Bryan Elliott

Reputation: 4095

How about this regex:

^\p{Latin}+$

Working regex example:

https://regex101.com/r/I5b2mC/1

Upvotes: 11

user557597
user557597

Reputation:

This might work

 [^\P{latin}\s\p{Punctuation}]

Its all latin, but not punctuation nor whitespace.
where \P means NOT this property
and \p means this property.

Put it in a negative class its

NOT, NOT Latin = Include All Latin
NOT Punctuation = Exclude Punctuation
NOT Whitespace = Exclude Whitespace

Upvotes: 3

Related Questions