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

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

  0123456789 
012 3456789
012 34 56 78 9
012-3456789
</ code> </ pre>

我必须查找的字符串格式如</ p>

   0123456789 
</ code> </ pre>

我的查询现在如下所示:
</ p>

  SELECT * FROM account WHERE phonenumber  ='0123456789'
</ code> </ pre>

但这种情况仅在将电话号码格式化为搜索字符串时才有效。
如何使用其他函数的正则表达式来搜索所有类型的格式化的电子邮件?</ p>
</ div>

展开原文

原文

I need to search in a database for a phonenumber.
However, I don't know how the phone number is stored in the database, this can be in different ways, like:

  0123456789 
  012 3456789 
  012 34 56 78 9 
  012-3456789

The string that I have to look for is always formatted like

 0123456789

My query now looks like:

SELECT * FROM account WHERE phonenumber = '0123456789'

But this ofcourse only works when the phonenumber is formatted like the search string.
How do I use a regex of other function to search for all kind of formatted phonenumbers?

dqmg80654
dqmg80654 看一下本机SQLLIKE运算符-它不是正则表达式,但它允许您匹配模式。techonthenet.com/sql/like.php
7 年多之前 回复

2个回答



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

  SELECT * FROM account WHERE phonenumber REGEXP'012(|  -  |)34(|  )56(|)78(|)9'; 
</ code> </ pre>
</ div>

展开原文

原文

Use Mysql REGEXP. This is a basic example of how You can achieve that. Works with every number format in Your example. Think of better regexp to be more precise.

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



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

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

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

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

您还需要修复表中已有的数字。</ p>

< p>最好的方法是存储规范化的数据,即:国家+地区+数字。</ p>
</ div>

展开原文

原文

While it is possible to perform REGEXP's in MySql, I don't think its a very solid solution and the expression will be hard to tune.

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

A good tool to test expressions is this site: http://www.spaweditor.com/scripts/regex/index.php

The trick is to normalize your data before you enter in in your database which means strip the telephone number of all non numeric characters.

You'll need to fix the numbers already in the table too.

Best way is to store the data normalized, i.e.: Country + area + number separately .

dsfhd78978
dsfhd78978 你最终会得到一个这样的表达式:/([0-9] {1}(| - |)){9} [0-9] {1} /(略微借用DanielsPitkeviÄs)。 这符合您的所有示例。 但我不是一个正则表达的大师。 测试表达式的一个好工具是这个站点:spaweditor.com/scripts/regex/index.php - 将其添加到主帖。
7 年多之前 回复
duanchuaiwan0063
duanchuaiwan0063 我知道最好的方法是将数据放在具有给定格式的数据库中。 但重点是我对将这些数据放入数据库没有任何影响。 我只能从这个数据库中读取! 我将尝试你的答案,让你知道它是否适合我!
7 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐