【问题标题】:PHP Regex validate letters and Spanish accentPHP Regex 验证字母和西班牙口音
【发布时间】:2012-01-03 21:58:42
【问题描述】:

我如何添加/即兴修改我的代码,以便西班牙口音除了普通字母表 (a-z) 之外也被视为有效

我的代码中有以下内容

public static function IsAlpha($s){
  $reg = "#[^a-z\s-]#i";
  $count = preg_match($reg, $s, $matches);
  return $count == 0;
}

【问题讨论】:

标签: php regex encoding


【解决方案1】:

我认为您可以使用每个字母的hexadecimal representation:

<?php
function IsAlpha($sString)
{

  $reg = "#[a-zA-Z\xE1\xE9\xED\xF3\xFA\xC1\xC9\xCD\xD3\xDA\xF1\xD1]+#i";
  $count = preg_match_all($reg, $sString, $matches, PREG_OFFSET_CAPTURE);
  return $matches;
}
echo '<pre>';
print_r(IsAlpha("abcdefgh ñ á é í ño 123 asd asáéío nmas asllsdasd óúfl ÑABDJÓ ÚñÍÉ"));
echo '</pre>';

我不知道是否所有的字母,但你可以用这个link添加更多。

【讨论】:

    【解决方案2】:

    正如this question 的答案中所发现的,您可以使用完整的字母 Unicode property \p{L} 匹配重音字符。这包括常规的 a-z 字符以及重音字符,因此请用以下代码替换表达式中的 a-z:

    $reg = "#[^\p{L}\s-]#u";
    

    请注意,要使用它,您需要在结束分隔符后加上 UTF-8 modifier u,因为文档说这样的 Unicode "字符类型在选择 UTF-8 模式 时可用”。

    【讨论】:

    • 就我而言,我必须添加 u 修饰符 (UTF8) 才能使其工作。
    • @user276648 谢谢,很好的发现。更新以反映这一点。
    【解决方案3】:

    你也可以使用T-Regx:

    pattern('[^\p{L}\s-]', 'u')->fails($s);
    

    【讨论】:

      猜你喜欢
      • 2015-01-16
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多