2016-08-12 7 views
1

Ich muss String filtern, um nur "Zahlen, Buchstaben und Buchstaben mit Akzenten" mit PHP zurückgeben.Regex mit nur: Zahlen, Buchstaben und Akzente

Ich habe viele verschiedene Regex ausprobiert und ich konnte nicht.

Der nächstgelegene ich bekam, war:

$string = 'Você está bem? 123 # ! @ ...'; 
echo preg_replace('/[^\w\s+$]/', '_', $string); 

// Return: Voc__ est__ bem_ 123 _ _ _ ___ 
// But I need to return: Você_está_bem_123 _ _ _ ___ 

Kann mir jemand helfen? Ich habe versucht, es stundenlang zu lösen und dabei noch nach anderen Fragen zu suchen.

Antwort

7

einen /u Modifikator hinzufügen:

$string = 'Você está bem? 123 # ! @ ...'; 
echo preg_replace('/[^\w\s+$]/u', '_', $string); 
          ^

Siehe this IDEONE demo

Mehr zu dem /u Modifikator in SO regex Dokumentation:

Muster und Schlagwortketten als UTF-8 behandelt werden.

+2

Gerade FYI: Wenn Sie Ihre Eingabe auch diakritische Zeichen als separate Symbole enthält (müssen Sie '\ p {M}' auf der Zeichenklasse hinzuzufügen: '/ [^ \ w \ p {M} \ s + $]/u' als '/ \ w/u' passt nur' [\ p {L} \ p {N} _] ' –

+0

Es ist Arbeit, danke! Aber ich brauche" utf8_decode "und funktioniert nicht: https: //ideone.com/IagsYU –

+0

Sie sollten die Regex auf die Unicode-Zeichenfolge ausführen * vor * übergibt es an die 'utf8_decode'. –

Verwandte Themen