【问题标题】:Catch repeat letters in PHP - Regular expressions在 PHP 中捕捉重复字母 - 正则表达式
【发布时间】:2011-12-14 22:08:11
【问题描述】:

我必须检查用户输入以确保姓名、姓氏(等)输入正确且有效。我必须构建一个正则表达式来检查用户是否在名字、姓氏等中输入重复的字母......

例子:

  • AAAron = 因 3 A 而坏
  • AAron = 好
  • 汉娜 = 好
  • Hannah = 糟糕,因为 3 N's

是否有 PHP 正则表达式来捕捉这些情况? (我有基本的正则表达式知识,但这对我来说太多了)

编辑: 这也应该允许数字:David 3 或 III

谢谢

【问题讨论】:

  • 你是谁来验证某人姓名的拼写? :)
  • 希望你不打算走向国际。
  • @WesleyvanOpdorp 某人得到了一个有特定要求的项目。你听说过这个名字吗:AAAAAAARON?这些天很受欢迎
  • 我的朋友 Llywellyn 呢?他不允许加入你的网站吗?
  • 拒绝投票到 -3 似乎有点苛刻,这可能不是世界上最好的主意,但这是一个有效且措辞清晰的问题。当您不同意这个想法时,我不认为对 SO 投反对票。

标签: php regex character repeat


【解决方案1】:

您可以为此目的使用反向引用。

preg_match('/(\w)(\1+)/', $subject, $matches);
print_r($matches);

\1 表示重复第一次捕获,所以在这种情况下\w

在你的例子中,我认为使用正则表达式不是最好的解决方案,你为什么不计算任何字符的实例数?

$charCountArray = array();
foreach ($name as $char) {
    $charCountArray[$char]++;
}

后向引用是一项高级功能,幸运的是 PCRE 函数支持它。

注意:preg_match 只会匹配一个序列,如果您需要知道所有匹配,请使用preg_match_all

【讨论】:

    【解决方案2】:

    试试这个正则表达式:

    /(\w)\1{2}/
    

    【讨论】:

      猜你喜欢
      • 2014-09-10
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 2021-03-24
      • 2013-09-27
      相关资源
      最近更新 更多