2016-03-29 8 views
0

In meiner Datenbank habe ich eine Zahl: 00 48 76 848MySQL Regex ignoriert Leerraum

Die Saite gegen anzupassen ist: 004876848

ich habe:

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

Aber das doesn‘ t arbeiten.

Welche Regexp brauche ich, um dies zu erreichen?


$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

brauchen in mysql oder PHP? – devpro

+0

@devpro MySql :) – imperium2335

Antwort

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

Das entspricht nur einem Leerzeichen:/ – imperium2335

+0

SELECT * FROM Tabelle WHERE Kennwort REGEXP '[[: space:]]';
versuchte dies mit 00 48 76 848 .. es sollte funktionieren. –

+0

Wie gebe ich das als Platzhalter (?) Weiter? Siehe meine Bearbeitung – imperium2335

1

Sie nicht regex nur sagen kann, zu "ignorieren" Leerzeichen. Sie können es nur abgleichen, was mit einem Wert wie Ihrem fast unmöglich ist.

Ein einfacher Ansatz, ohne regex wäre die Räume mit REPLACE() zu entfernen, bevor Sie es gegen den Wert testen:

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

Gute Praxis Ihre Werte würden zu normalisieren, bevor Sie sie in der Datenbank zu speichern. Das macht alles viel einfacher.