0

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

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

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

我的比赛变成Lissa Smith

如何匹配所有特殊字符,例如é

4

3 回答 3

1

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

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

等于:[“梅丽莎·史密斯”]

于 2013-04-29T21:25:16.283 回答
0

/u 使用修饰符将正则表达式置于 Unicode 模式,并使用适当的Unicode 字符类,而不是仅对拉丁字母进行硬编码:

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

我还将模式锚定在和之间^$因为否则它最终可能会匹配你不想要的东西。

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

但是,必须说像这样天真地解析名称不会给您带来很好的结果。人们的全名太复杂了,以至于这种简单的事情无法全面发挥作用。

于 2013-04-29T20:36:52.690 回答
-1

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

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

于 2013-04-29T20:41:37.997 回答