Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用正则表达式在数据库中搜索电话号码_Php_Sql - Fatal编程技术网

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

Php 使用正则表达式在数据库中搜索电话号码,php,sql,Php,Sql,我需要在数据库中搜索电话号码但是,我不知道电话号码是如何存储在数据库中的,这可能有不同的方式,例如: 0123456789 012 3456789 012 34 56 78 9 012-3456789 我要查找的字符串的格式总是 0123456789 我的查询现在看起来像: SELECT * FROM account WHERE phonenumber = '0123456789' 但这当然只在电话号码的格式与搜索字符串类似时才起作用如何使用其他函数的regex搜索

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

  0123456789 
  012 3456789 
  012 34 56 78 9 
  012-3456789
我要查找的字符串的格式总是

 0123456789
我的查询现在看起来像:

SELECT * FROM account WHERE phonenumber = '0123456789'

但这当然只在电话号码的格式与搜索字符串类似时才起作用
如何使用其他函数的regex搜索所有类型的格式化电话号码?

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

SELECT * FROM account WHERE phonenumber REGEXP '^([0-9]{1}( |-|)){9}[0-9]{1}$'
测试表达式的一个好工具是此网站:

诀窍是在进入数据库之前对数据进行规范化,这意味着去除电话号码中的所有非数字字符

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


最好的方法是存储规范化的数据,即:国家+地区+数字分开存储。

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

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

看看本机SQL
LIKE
操作符——它不是正则表达式,但它允许您匹配模式。我知道最好的方法是将数据以给定的格式放入数据库中。但关键是我对将这些数据放入数据库没有影响。我只能从这个数据库中读取!我要试试你的答案,让你知道它是否适合我!你可能会得到这样一个表达式:/([0-9]{1}(|-|){9}[0-9]{1}/(稍微借用了Daniels Pitkevičs)。这与您的所有示例都匹配。但我不是一个regex大师。测试表达式的一个很好的工具是这个站点:--在主帖子中添加了这个。