MySQL 正则表达式忽略空格


MySQL Regex ignore white space

在我的数据库中,我有一个数字:00 48 76 848

要匹配的字符串是:004876848

我有:

...
WHERE tel REGEXP ''s($q)'
...

但这行不通。

我需要什么正则表达式来实现这一点?


$q = preg_replace("/[''D]+/", "", $q);
        return DB::select('SELECT contacts_phones.id, CONCAT(firstName, " ", lastName) AS name, tel, "phoneNumber" AS type, entities.name AS company,
            entities.id AS companyId
            FROM contacts_phones, contacts, entities
            WHERE tel REGEXP "[[:space:]]"
            AND contacts_phones.contactId = contacts.id
            AND entities.id = contacts.ownerId
            AND contacts.ownerTypeId = 1
            AND contacts.archived = 0
            LIMIT ' . $limit, array('%' . $q . '%'));

你不能告诉正则表达式只是"忽略"空格。您只能匹配它,这几乎不可能与您这样的值匹配。

一种更简单的方法是,没有正则表达式,是在根据你的值测试之前删除带有REPLACE()的空格:

 WHERE REPLACE(`tel`, ' ', '') = '004876848'

好的做法是在将值存储在数据库中之前对其进行规范化。这使得其他一切都变得容易得多。

WHERE tel REGEXP '[[:space:]]';