【问题标题】:Accented character validation in PHPPHP中的重音字符验证
【发布时间】:2014-03-30 20:08:42
【问题描述】:

什么是一个好的单行 php 正则表达式,用于检查带有 重音字符(如果某人的名字是 Pièrre)的名字/姓氏字段,可以匹配如下内容:

<?php
$strErrorMessage = null;

if(!preg_match('/\p{L}0-9\s-+/u', trim($_POST["firstname"])))
  $strErrorMessage = "Your first name can only contain valid characters, ".
    "spaces, minus signs, or numbers.";
?>

这会尝试使用来自 this post 的 unicode 验证,但无法正常工作。该解决方案似乎很难用谷歌搜索。

【问题讨论】:

  • 嗯?为什么要排除撇号?此外,我从未听说过包含“减号”的名称,尽管我知道许多包含连字符。
  • @TRiG:我很确定“减号”和连字符(输入时)是完全一样的..
  • 这是一个长镜头,但也试试\p{M}
  • 作为一般规则,do not try to validate name fields。另外,@Magictallguy,就程序员而言,它是同一个字符,是的,但是在名称的上下文中将它称为减号只是很奇怪。
  • @TriG:是的,同意。我会给你那个:P

标签: php regex unicode


【解决方案1】:

除了验证名称的困难之外,您还需要将您的角色放入character class/\p{L}0-9\s-+/u 仅匹配“Ä0-9 ------”之类的序列。你想做的是

/^[\p{L}0-9\s-]+$/u

另外我添加了anchors,它们确保正则表达式尝试匹配完整的字符串。

正如 ex3v 提到的,您可能应该将 \p{M} 添加到该类以匹配组合字符。 See Unicode properties.

/^[\p{L}\p{M}0-9\s-]+$/u

【讨论】:

  • ...我希望你也能在其中添加 php 代码。
  • @FlorianMertens,哪个代码? if(!preg_match('/^[\p{L}\p{M}0-9\s-]+$/u', trim($_POST["firstname"]))) $strErrorMessage = "Your first name can only contain valid characters, ". "spaces, minus signs, or numbers.";???
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多