2010-09-05 9 views
2

J'ai une correspondance de motif ici qui semble devoir fonctionner correctement. Cependant toute entrée que je donne fait échouer le conditionnel. Je vais traiter le cas '99999-9999' après avoir fait fonctionner le cas '99999'.php regex issues

$ ZipCode est un champ de texte soumis en POST.

$ZipCode      = $_POST["ZipCode"]; 

if(!preg_match("/^[0-9]{5}$/", $ZipCode)) 
{$error_str .= "The zip code you enter must be in the form of: '99999' or '99999-9999'\n";} 

if(isset($_POST['submit'])) 
{?><script>var error = <?= json_encode($error_str);?>; 
    alert(error); 
    </script> 
<?} 

'11111' échoue et '111111' échoue également

+0

Comment savez-vous que le conditionnel est échec? Avez-vous essayé le débogage pour voir quelle est la valeur de '$ error_str' immédiatement après l'exécution du conditionnel? –

Répondre

2

Votre code devrait fonctionner correctement. Exemple:

$ZipCode = "111111"; 

if(!preg_match("/^[0-9]{5}$/", $ZipCode)) 
{ 
    echo "Incorrect format"; 
} 

Résultat:

 
Incorrect format 

Essayez d'entrer une entrée invalide pour voir si le message d'erreur est affiché.


Pour gérer les deux cas, à la fois, vous pouvez utiliser cette expression régulière:

/^[0-9]{5}(?:-[0-9]{4})?$/ 
+0

J'ai déjà essayé, mais ça échoue toujours. – Dorian06

+3

Il doit y avoir une erreur avec le contenu de votre variable '$ ZipCode' –

+0

L'approche de Colin HERBERT est une bonne suggestion donc +1 pour cela, mais ce n'est pas la seule erreur possible. Une autre est que vous pourriez modifier le fichier mais en oubliant de le sauvegarder. Cela arrive souvent ... c'est une erreur facile à commettre. –