如何使用REGEX清除标点符号,空格和字母

时间:2012-05-10 16:47:22

标签: mysql regex replace

我有一些关于电话号码的例子,如下所示:

0810-093-485-58
0811.4845.5677
0812 567 6788 2
08138475967079/0813845765998
0814749345875 NEW
64739845985
0815756867967 (G) / 022 845 769
00816956865090
0817637698578

我尝试使用replace和regexp,如下所示:

select replace (number, '','') as phone_number
from details
where number not regexp '[[:punct:] A-Za-z]' and number not regexp '^ [1-9]'

这些语法仅应用于结果:

0817637698578

我的观点这里是我要清理这些标点符号,空格和包含的字母:

081009348558
081148455677
08125676788 2
08138475967079
0814749345875
0815756867967
0816956865090
0817637698578

因此,结果不仅是一个,而且所有的电话号码,只是非数字正在被清除。 语法怎么样?请帮忙。谢谢。

2 个答案:

答案 0 :(得分:1)

您的where子句排除了包含字母,空格或标点符号的所有数字,因此您将看到的所有数字都是格式正确的数字。此外,replace (number, '','')也不会对字符串进行任何更改。

如果没有正则表达式replace函数,没有很好的方法可以做到这一点,它可以作为用户定义的函数使用,但不能作为本机函数使用。请看PREG_REPLACE here

答案 1 :(得分:1)

为什么不在发布到数据库的代码中执行此操作?在大多数语言中,regexp比在SQL中容易得多,并且您还可以在数据库服务器上不添加更多负载。

那粗糙对你没有帮助。您是否考虑过使用用户定义函数?比如这个包https://launchpad.net/mysql-udf-regexp