2017-02-22 4 views
1

Voici mon code. J'essaye de faire correspondre cette chaîne avec ma regex mais elle échoue toujours sur mon serveur xampp local et mon serveur dédié. Surprenant quand je l'ai testé sur regex101 cela fonctionne d'une manière ou d'une autre. Pourquoi ??php regex ne fonctionne pas en travaillant sur regex101

<?php 

$str = "80 ×× ×× ×× ×× ×× 
×× ×× 91 94 ×× ×× 
"; 

echo strlen($str); 

if (preg_match("/[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}/", $str)) { 
    echo "ok"; 
}else{ 
    echo "no mto"; 
} 

?> 
+0

Votre regex est source de confusion. Qu'est-ce que tu veux faire? – Mohammad

+0

J'ai un code de correspondance quelque chose comme dans la chaîne mais ils varient à chaque fois – Hutarsh

+0

Vous pouvez le simplifier à '[0-9 * + = \ - # @ ×?] {2,3} (?: [\ [\]() .] {1,3} [0-9 * + = \ - # @ ×?] {2,3}) {4} ' – chris85

Répondre

2

Vous devez utiliser le modificateur u pour activer le mode unicode pour les expressions régulières, puisque ce caractère × dans le sujet et le modèle est pas dans la plage de caractères ASCII. Notez le /u de fuite dans la définition du modèle:

<?php 

$str = <<<EOT 

80 ×× ×× ×× ×× ×× 
×× ×× 91 94 ×× ×× 

EOT; 

if (preg_match("/[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}/u", $str)) { 
    echo "ok"; 
} else { 
    echo "no mto"; 
} 

La sortie est évidemment:

ok 
+0

Merci l'homme :) – Hutarsh