使用正则表达式在数据库中搜索电话号码

时间:2013-04-04 11:31:27

标签: php sql

我需要在数据库中搜索一个电话号码。
但是,我不知道电话号码是如何存储在数据库中的,这可以采用不同的方式,例如:

  0123456789 
  012 3456789 
  012 34 56 78 9 
  012-3456789

我必须寻找的字符串总是格式化为

 0123456789

我的查询现在看起来像:

SELECT * FROM account WHERE phonenumber = '0123456789'

但是这种情况只有在将电话号码格式化为搜索字符串时才有效。
如何使用其他函数的正则表达式来搜索所有类型的格式化的语音?

2 个答案:

答案 0 :(得分:0)

虽然可以在MySql中执行REGEXP,但我认为它不是一个非常可靠的解决方案,而且表达式很难调整。

SELECT * FROM account WHERE phonenumber REGEXP '^([0-9]{1}( |-|)){9}[0-9]{1}$'

测试表达式的一个好工具是这个网站:http://www.spaweditor.com/scripts/regex/index.php

诀窍是在您输入数据库之前规范化您的数据,这意味着删除所有非数字字符的电话号码。

您还需要修复表中已有的数字。

最好的方法是存储规范化的数据,即:Country + area + number。

答案 1 :(得分:0)

使用Mysql REGEXP。这是您如何实现这一目标的基本示例。适用于您的示例中的每种数字格式。 想想更好的正则表达式更精确。

SELECT * FROM account WHERE phonenumber REGEXP '012( |-|)34( |)56( |)78( |)9';