2010-12-02 11 views
2

Hallo Ich brauche diesen Ausdruck zu ändern, damit es Leerraumphp Preg eine String ignorieren Leerraum

preg_match("/([a-zA-Z\s]{2,}\,\s)+(RED|BLUE|GREEN|BLACK)$/i",$query, $matches)) 

$query = "Honda Accord, RED" 
ignoriert

so es immer noch das Spiel bekommt, auch wenn es Leerraum hinzugefügt wird, wie zum Beispiel;

Grundsätzlich brauche ich die Spiele wieder als Honda Accord, ROT mit korrekten Abständen. Wie Sie sehen können, bin ich kein regexp Experte :)

Vielen Dank im Voraus.

Antwort

2
$query = " Honda Accord , RED "; 
$query = trim($query); // remove spaces at the ends // 
$query = preg_replace('/\s+/', ' ', $query); // make sure there aren't multiple spaces // 
$query = preg_replace('/\s?,\s?/', ', ', $query); // enforce the 'word, word' format // 
preg_match("/([a-zA-Z\s]{2,}\,\s)+(RED|BLUE|GREEN|BLACK)$/i",$query, $matches); 

Dieses Format-String, so dass es eine Standardform haben, aber wenn Sie nur die Spiele bekommen wollen, ist es ausreichend, \s* hinzuzufügen, wo nötig.

+0

Danke, nicht ganz richtig, aber ich bin es aus. Ich hatte bereits die Trimmung ($ query) - die preg_match funktioniert, aber der Trick war, den preg_space auf den $ Matches nach - nicht vorher zu tun. Do! – gus

+0

Ich habe es getestet und für das Beispiel, das Sie geliefert haben, hat es in dieser Form gut funktioniert. –

+0

Danke nochmal Alin ja es hat geklappt aber ich habe auch Anfragen wie Ford, RED also musste ich dafür auch arbeiten. Ich habe das vergessen. – gus

0

Sie müssen Leerzeichen vor und nach der Farbe und auch am Anfang:

^\s*([a-zA-Z\s]{2,},\s)+\s*(RED|BLUE|GREEN|BLACK)\s*$ 

Rubular link