Reputation: 884
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
Reputation: 4095
How about this regex:
^\p{Latin}+$
Working regex example:
https://regex101.com/r/I5b2mC/1
Upvotes: 11
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