2012-07-14 119 views
1

我有一个列中有电话号码的MySQL表 - 有些不是真正的电话号码,我想通过发射一个单一的查询说,类似的东西“将所有电话号码设置为NULL,其中电话号码包含0-9以外的其他字符和'+'”Mysql的正则表达式允许数字和'+'

到目前为止,我已经提出了以下内容,但不知道如何为“+” :

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

有没有人知道如何容忍在该查询中的'+'?另外,'+'需要在电话号码的开头。

谢谢!

查尔斯

+0

'\ +'不起作用? – hjpotter92 2012-07-14 11:46:10

回答

1

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

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

这将匹配任何不与+可选开头,后跟唯一数字。如果您还需要允许连字符和点的电话号码,将其添加到[]字符类:

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

谢谢! '+'不是可选的,所以我只需要摆脱'?' ? – weltschmerz 2012-07-14 11:47:18

+0

@Charles是的,删除? – 2012-07-14 11:48:32

+0

看起来不错,但是当我测试以下查询时: “SELECT * FROM'hosts' WHERE phone NOT REGEXP('^ \ +?[0-9] + $')”我得到错误“#1139 - 'regexp'重复运算符操作数无效' - 怎么回事? – weltschmerz 2012-07-14 11:50:21