【问题标题】:preg_replace with names including hyphen for double barrelled surnamespreg_replace 名称包括双桶姓氏的连字符
【发布时间】:2017-06-09 13:53:52
【问题描述】:

如何允许用户使用连字符(例如Jones-Smith)输入他们的姓氏,但删除所有其他非字母数字?

目前我正在使用这个:

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

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

【问题讨论】:

  • 只有一种可靠的方法可以准确匹配名称;带有.* 的单个name 字段用于验证:kalzumeus.com/2010/06/17/… - 有了你所拥有的,你已经排除了世界上所有的O'Malleys......并且没有Unicode 标志,可能是东南亚的大部分地区。
  • 为什么不让用户输入任何内容,然后在提交时使用更直接的正则表达式(如'~\A\w+(?:[\'-]\w+)*\z~u')进行验证?

标签: php preg-replace hyphen


【解决方案1】:

如果您想保留连字符,只需将它们添加到您的否定字符集中,如下所示:

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

【讨论】:

  • 如果连字符是类中的第一个或最后一个字符,则不需要转义。
猜你喜欢
  • 1970-01-01
  • 2016-02-22
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
  • 2015-12-27
相关资源
最近更新 更多