我有一个mysql表,其中包含一个包含电话号码的列 - 有些不是真正的电话号码,我想通过触发一个类似“将所有电话号码设置为NULL”的单个查询来查找电话号码由0-9和“+”之外的其他字符组成。
到目前为止,我已经提出以下内容,但不知道如何为'+'添加容差:
$query="UPDATE table SET phone='NULL' WHERE phone REGEXP ('[0-9]')!=1";
mysql_query($query);
有人知道如何在该查询中容忍'+'吗?此外,“+”需要位于电话号码的开头。
谢谢!
查尔斯
答案 0 :(得分:1)
首先,使用NOT REGEXP
代替!=1
。要在开始时允许+
,请使用^\\+?
。由于+
是正则表达式中的特殊字符,因此必须使用反斜杠进行转义(必须使用另一个反斜杠进行转义)。然后,您需要一个或多个数字([0-9]+
),直到字符串$
的末尾。
$query="UPDATE table SET phone='NULL' WHERE phone NOT REGEXP '^\+?[0-9]+$'";
这将匹配任何不以+
开头的任何内容,后跟仅数字。如果您还需要在电话号码中允许连字符和点,请将它们添加到[]
字符类中:
'^\\+?[0-9.-]+$'