Mysql regexp允许数字和' +'

时间:2012-07-14 11:40:35

标签: mysql regex

我有一个mysql表,其中包含一个包含电话号码的列 - 有些不是真正的电话号码,我想通过触发一个类似“将所有电话号码设置为NULL”的单个查询来查找电话号码由0-9和“+”之外的其他字符组成。

到目前为止,我已经提出以下内容,但不知道如何为'+'添加容差:

$query="UPDATE table SET phone='NULL' WHERE phone REGEXP ('[0-9]')!=1";
mysql_query($query);

有人知道如何在该查询中容忍'+'吗?此外,“+”需要位于电话号码的开头。

谢谢!

查尔斯

1 个答案:

答案 0 :(得分:1)

首先,使用NOT REGEXP代替!=1。要在开始时允许+,请使用^\\+?。由于+是正则表达式中的特殊字符,因此必须使用反斜杠进行转义(必须使用另一个反斜杠进行转义)。然后,您需要一个或多个数字([0-9]+),直到字符串$的末尾。

$query="UPDATE table SET phone='NULL' WHERE phone NOT REGEXP '^\+?[0-9]+$'";

这将匹配任何不以+开头的任何内容,后跟仅数字。如果您还需要在电话号码中允许连字符和点,请将它们添加到[]字符类中:

'^\\+?[0-9.-]+$'