2017-06-09 36 views
0

如何让用户输入使用连字符自己的姓氏(如Jones-Smith),但除去所有其他非字母数字?的preg_replace与名称,包括连字符双筒姓氏

目前我使用的是这样的:

$_POST['Surname'] = preg_replace("/[^ \w]+/", "", $_POST['Surname']); 

这是完美的,除了它删除连字符。有什么建议?

+0

只有1安全可靠的方式准确地匹配名称;一个带有'。*'的名字字段用于验证:http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ - 已经排除了世界上所有的* O'Malleys *,没有Unicode旗帜,可能是东南亚的大部分地区。 – CD001

+0

为什么不让用户输入任何内容,然后在提交时使用更直接的正则表达式验证,如''〜\ A \ w +(?:[\' - ] \ w +)* \ z〜u''? –

回答

0

如果你想保持连字符,只需将它们添加到您的否定的字符集是这样的:

$_POST['Surname'] = preg_replace("/[^ \w\-]+/", "", $_POST['Surname']); 
+0

摆脱连字符,如果它是班上第一个或最后一个字符是没有必要的。 – mickmackusa