【问题标题】:Checking for 2 consecutive string of numbers of a zipcode检查邮政编码的 2 个连续数字字符串
【发布时间】:2013-09-19 15:16:08
【问题描述】:

我想检查一个字符串,例如。 56401 有 2 个连续数字 (5,6) 并检查反向 (6,5) 并且需要返回 false 否则为 true。我尝试使用 preg_match 但我认为它不能正常工作:

/\d{4}/

关于如何改进这一点的任何想法?

【问题讨论】:

  • 正则表达式是一个很好的工具,但它们并不能解决所有问题。在这种情况下,我绝对不会使用它们。将数字解析为数字,然后检查每个连续对之间的差异。
  • 或者只是对前两个数字进行子串化,再做一次并翻转它们,然后检查这种方式
  • 您是否在尝试识别回文?

标签: php regex function math logic


【解决方案1】:

我建议不要使用正则表达式,而是这样:

function has_consecutive_chars($input) {
    $chars = str_split($input);
    for ($i = 1; $i < count($chars); $i++)
    {
        if (abs($chars[$i] - $chars[$i-1]) == 1)
        {
           return true;
        }
    }
    return false;
}

has_consecutive_chars('56401'); // true
has_consecutive_chars('72674'); // true
has_consecutive_chars('53794'); // false

注意,这也适用于非数字(例如,'ab' 将被视为连续对)。如果您只希望此函数处理数字,我建议您在将字符串传递给此函数之前验证您的字符串(正则表达式是一个很好的解决方案)。

【讨论】:

  • 这看起来不错,但它似乎只适用于前 2 个数字,而不是例如说:72674(6,7 是连续的)
  • @GSZingh 它对我有用,但也许您在if 之后放置了一个else,或者将第二个return 分组在for 下,这两种情况都会导致这种行为。为了清楚起见,我已经更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多