2011-07-20 6 views
1

Je dois construire une regex (en PHP) qui correspond si une chaîne a au moins un caractère différent d'un ensemble fourni. Voici mon ensemble:REGEX pour les caractères accentués

A à Z et a à z, des chiffres et áéíóúüÁÉÍÓÚÜ¡¿ -:?

Donc, ce mot ne doit pas correspondre à: Sebastián Ce match: Sebastiàn

I reprhased la question due au commentaire de varchar256. BTW, lorsque les exemples diffèrent des instructions verbeux, prendre l'exemple comme la véritable intention de l'auteur de la doc.

+0

Quelle est la raison pour autoriser certains caractères accentués et pas d'autres? Cela pourrait rendre les choses plus simples, avec par exemple une utilisation locale. – Wrikken

+1

Vous dites que la chaîne ne peut pas correspondre si elle correspond à l'un de l'ensemble que vous avez mentionné, et cet ensemble incluait des lettres non accentuées. Pourtant, vous avez donné 'Sebastiàn' comme exemple. C'est un peu confus. – varchar255

Répondre

4
preg_match('/[^A-Za-z0-9áéíóúüÁÉÍÓÚÜ¡¿!?\-:]/', ...); 

Notez le ^ à l'intérieur des crochets - que le match inverse, cette regex correspondront sur toutes les chaînes qui contient au moins un caractère qui ne figure pas dans les supports.

0

Utilisez un modèle de jeu de caractères: preg_match('/[^\wáéíóúüÁÉÍÓÚÜ¡¿!?-:]/')

+0

Envisagez d'ajouter le drapeau Unicode. – phant0m

0
$string = "Sebastiàn"; 

$clean_string = preg_replace("/[^a-zA-ZáéíóúüÁÉÍÓÚÜ¡¿!?\\-:]*/",$string); 

assurez-vous d'échapper au tableau de bord en classe de caractères.

Questions connexes