在给定的手机号码中,在同一位置匹配至少5个号码位置

时间:2016-03-03 13:08:12

标签: php mysql regex

鉴于我有以下电话号码:

  • 9904773779

我想在我的数据库中搜索与上述数字至少有5位数字的其他电话号码,例如:

  • 99 33的 7 2 3 98的 9
  • 9 4 0 第3的 7 9 3 第3的 7 8

我的第一个是使用这样的查询:

select mobileno from tbl_registration where mobileno like '%MyTextBox Value%'
然而,这并没有奏效。

2 个答案:

答案 0 :(得分:3)

我认为这里更整洁的PHP解决方案是使用similar_text

  

这计算两个字符串之间的相似性。

示例演示:

$numbers = array("1234567890", "9933723989", "9403793378");
$key = "9904773779";
foreach ($numbers as $k) {           
  if (similar_text($key, $k) >= 5) { // There must be 5+ similarities
    echo $k . PHP_EOL;  
  }
}

输出:[ 9933723989, 9403793378]

请参阅IDEONE demo

答案 1 :(得分:2)

我想我会选择PHP,虽然不是很整洁,但可能有更好的方法。

<?php
$strOne = '9904773779';
$strTwo = '9933723989';
$arrOne = str_split($strOne);
$arrTwo = str_split($strTwo);
$arrIntersection = array_intersect($arrOne,$arrTwo);
$count=0;
foreach ($arrIntersection as $key => $value) {
  if ($arrOne[$key] === $arrTwo[$key]) {
    $count++;
  }
}
print_r($count);
?>

在第一阶段,我将字符串拆分为数组。然后我使用array_intersect来识别重复值并将它们保存到数组中。这节省了必须遍历每个数字。然后我循环通过相同值的数组并比较两个数组以查看值是否相同。

但我期待更冷静的答案。