2016-03-29 7 views
0

В моей базе данных у меня есть номер: 00 48 76 848MySQL Regex игнорировать пробелы

Строка для сопоставления является: 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 . '%')); 
+0

Необходимость в mysql или PHP? – devpro

+0

@devpro MySql :) – imperium2335

ответ

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

Это соответствует только одному пробелу:/ – imperium2335

+0

SELECT * FROM table WHERE password REGEXP '[[: space:]]';
попробовал это, используя 00 48 76 848 .. он должен работать. –

+0

Как передать это как заполнитель (?)? См. Мое редактирование. – imperium2335

1

Вы не можете сказать регулярное выражение просто "игнорировать" пробелы. Вы можете только сопоставить его, что почти невозможно с такой же стоимостью, как ваша.

Более легкий подход, без регулярных выражений, было бы удалить пробелы с REPLACE(), прежде чем испытать его против вашей ценности:

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

Хорошая практика будет нормализовать свои ценности, прежде чем хранить их в базе данных. Это облегчает все остальное.