2010-11-11 3 views
1

hier, je suis un peu d'aide ici pour obtenir le droit d'expression régulière pour accepter l'entrée telle que,preg_match() pour correspondre à l'une des condition donnée

Plymouth, United Kingdom 

mais je compris que je devais accepter cette entrée ci-après bien,

Plymouth, Devon, United Kingdom 

donc j'ajouté une autre expression dans le code ci-dessous et il peut maintenant accepter ne soit de la condition ci-dessus! Qu'est ce que j'ai mal fait?

if(!preg_match('/^[a-zA-Z\s]{4,}[\,]{1}[a-zA-Z\s]{4,}$/', $mem_town_city_country) || !preg_match('/^[a-zA-Z\s]{4,}[\,]{1}[a-zA-Z\s]{2,}[\,]{1}[a-zA-Z\s]{4,}$/', $mem_town_city_country)) 
{ 
    $error = true; 
    echo '<error elementid="mem_town_city_country" message="TOWN/CITY, COUNTRY - sorry, they appear to be incorrect."/>'; 
} 

comment puis-je faire pour accepter l'entrée soit

Plymouth, United Kingdom 

ou,

Plymouth, Devon, United Kingdom 

?

+0

Décrivez l'ensemble de la tâche. Quelle entrée pensez-vous être valide? – zerkms

Répondre

1

Remplacez || par &&. Le code actuel affichera le message d'erreur si la première regex ou la deuxième regex ne correspond pas. Vous souhaitez que le message d'erreur s'affiche uniquement si les deux expressions régulières ne correspondent pas.

if(!preg_match('/^[a-zA-Z\s]{4,}[\,]{1}[a-zA-Z\s]{4,}$/', $mem_town_city_country) && !preg_match('/^[a-zA-Z\s]{4,}[\,]{1}[a-zA-Z\s]{2,}[\,]{1}[a-zA-Z\s]{4,}$/', $mem_town_city_country)) 

Vous pouvez également utiliser l'alternance regex pour combiner les deux:

if(!preg_match('/(^[a-zA-Z\s]{4,}[\,]{1}[a-zA-Z\s]{4,}$|^[a-zA-Z\s]{4,}[\,]{1}[a-zA-Z\s]{2,}[\,]{1}[a-zA-Z\s]{4,}$)/', $mem_town_city_country)) 

Bien sûr, il est possible de raccourcir, mais dans l'exemple de code ci-dessus, je suis en train de montrer le concept plutôt que rendre le code aussi concis que possible

+0

l'ai eu! Merci beaucoup! :-) – laukok

1

Ou vous pouvez utiliser une expression rationnelle, qui font tout le travail:

$input = 'Plymouth, Devon, United Kingdom'; 
$matched = preg_match('~^[a-z\s]{4,}(?:,[a-z\s]{4,}){1,2}$~i', $input, $matches); 
var_dump($matched, $matches); 
+0

cette expression est belle! Merci beaucoup! – laukok

Questions connexes