JavaScript / PHP正则表达式

时间:2013-04-29 20:31:43

标签: php javascript

我正在尝试将名字和姓氏与这样的东西相匹配。

$pattern = '/[a-zA-Z\-]{3,30} +[a-zA-Z]+/';

这很有效,除非我有这样的名字Mélissa Smith

我的匹配变为Lissa Smith

如何匹配é

等所有特殊字符

3 个答案:

答案 0 :(得分:1)

在javascript中,您可以使用unicode char范围而不是A-Za-z:

"Mélissa Smith".match(  /[\u80-\uffff]{3,30} +[\u80-\uffff]+/  )

等于:[“MélissaSmith”]

答案 1 :(得分:0)

使用/u modifier将正则表达式置于Unicode模式,并使用适当的Unicode character class代替硬编码拉丁字母:

$pattern = '/^(\pL|-){3,30}\s+\pL+$/u';

我还将模式固定在^$之间,否则它最终会匹配您不想要的内容。

你必须记住,当你这样做时,输入(以及模式本身)必须以UTF-8编码。

但是,必须要说天真地解析这样的名字并不能给你带来很好的结果。人们的全名太过于介入这个简单的全面工作。

答案 2 :(得分:-1)

尝试使用POSIX表达式[:alpha:]而不是[a-zA-Z-]来捕捉字符。 [:alpha:]会捕获等效字符,例如重音符号。

http://www.regular-expressions.info/posixbrackets.html