我正在尝试将名字和姓氏与这样的东西相匹配。
$pattern = '/[a-zA-Z\-]{3,30} +[a-zA-Z]+/';
这很好用,除非我有这样的名字Mélissa Smith
我的比赛变成Lissa Smith
如何匹配所有特殊字符,例如é
我正在尝试将名字和姓氏与这样的东西相匹配。
$pattern = '/[a-zA-Z\-]{3,30} +[a-zA-Z]+/';
这很好用,除非我有这样的名字Mélissa Smith
我的比赛变成Lissa Smith
如何匹配所有特殊字符,例如é
在 javascript 中,您可以使用 unicode 字符范围而不是 A-Za-z:
"Mélissa Smith".match( /[\u80-\uffff]{3,30} +[\u80-\uffff]+/ )
等于:[“梅丽莎·史密斯”]
/u
使用修饰符将正则表达式置于 Unicode 模式,并使用适当的Unicode 字符类,而不是仅对拉丁字母进行硬编码:
$pattern = '/^(\pL|-){3,30}\s+\pL+$/u';
我还将模式锚定在和之间^
,$
因为否则它最终可能会匹配你不想要的东西。
您必须记住,当您这样做时,输入(以及模式本身)必须以 UTF-8 编码。
但是,必须说像这样天真地解析名称不会给您带来很好的结果。人们的全名太复杂了,以至于这种简单的事情无法全面发挥作用。
尝试使用 POSIX 表达式 [:alpha:] 而不是 [a-zA-Z-] 来捕捉字符。[:alpha:] 将捕获等价字符,例如重音符号。