PHP:检查任何基于拉丁语言的字母字符?

时间:2014-02-07 17:08:56

标签: php regex internationalization locale

使用PHP我想检查字符串是否只包含字母字符(我不想允许任何数字或特殊字符,如!@#$%^& *)。 ctype_alpha()对于这个目的来说似乎很棒。

问题是我想要允许重音字母,例如法语等等。例如,我想允许“Lórien”。

我知道ctype_alpha()可以与set_locale()一起使用,但对于这个用例来说似乎仍然有限,因为我想允许所有基于拉丁语言的字符。

任何想法如何最好地实现这一目标?


注意:在How can I detect non-western characters?发布的解决方案非常适合显式检测非拉丁字符,但它允许特殊字符和空格,我不想允许:

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

我想要一些可以这样工作的东西,但是将允许的字符限制为 字母字符 (所以没有特殊的字符,比如!@#$%^&)。

2 个答案:

答案 0 :(得分:5)

这个正则表达式怎么样:

^[\p{Latin}[A-Za-z]+$

工作正则表达式示例:

http://regex101.com/r/vN6qU8

答案 1 :(得分:3)

这可能有效

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

它全是拉丁语,但不是标点符号,也不是空格 其中\P表示不是此属性
\p表示此属性。

把它放在负面的

NOT,NOT Latin =包括所有拉丁文 NOT 标点符号=排除标点符号
NOT Whitespace = Exclude Whitespace