【问题标题】:How to clean up the punctuations, spaces, and letter contain using REGEX如何使用 REGEX 清理标点符号、空格和字母
【发布时间】:2012-05-19 07:16:38
【问题描述】:

我有一些电话号码的例子,如下图:

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

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

【问题讨论】:

    标签: mysql regex replace


    【解决方案1】:

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

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

    【讨论】:

    • 尝试在PHP中使用PREG_REPLACE,在MySQL中不能使用?当我得到结果后,如何将 PREG_REPLACE 函数改变的结果插入到数据库中?我应该使用查询吗?
    • 如果你要使用 PHP 为你修改字符串,你需要使用 SELECT 获取每条记录,删除标点符号,然后使用 UPDATE 更改记录。正如我所说,PREG_REPLACE UDF 可用于 MySQL here
    • 我使用 PHP 因为在 MySQL 中不起作用。它说“功能 ...preg_replace 不存在”。所以,我必须安装该功能才能使其正常工作,对吗?我会尝试。感谢您的信息:)。
    • @candies: 是的,很抱歉我可以说得更清楚些。您必须下载并安装我链接到的软件包才能使PREG_REPLACE 可用。您还应该查看 Mark Finch 提供的链接,看看您是否更喜欢那里提供的 REGEXP_REPLACE,尽管两者会非常相似。
    【解决方案2】:

    为什么不在发布到数据库的代码中这样做呢? regexp 在大多数语言中都比在 SQL 中容易得多,而且您还有一个额外的好处,那就是不会在数据库服务器上增加更多负载。

    粗略的不能帮助你解决这个问题。您是否考虑过使用用户定义的函数?比如这个包https://launchpad.net/mysql-udf-regexp?

    【讨论】:

    • PREG_REPLACE 和 REGEXP_REPLACE 都不同?
    • 我建议添加您正在使用的 PHP 代码,以便我们更好地了解您的问题所在。我建议在输入时验证电话号码。这将使您的数据库保持清洁。然后您需要做的就是编写一个 sql 函数并清理现有数据,或者如果更容易编写一个 PHP 脚本来提取记录,则使用 PHP 正则表达式执行清理,例如:$str = preg_replace('[\D]', '', $str);- 将删除任何不是一个数字。注意:如果您的电话号码需要常用属性,例如 +86 21 5555 8888 x 2020 中的“+”或“x”,那么这些属性也会被删除。
    • 一些可能对您有帮助的链接是:hereherehere
    猜你喜欢
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    相关资源
    最近更新 更多