Domanda

I valori saranno in questo formato 123-123-123-12345 che vorrei il preg_match lavorare. Riesci a vedere qualcosa di sbagliato in questo regex?

foreach($elem as $key=>$value) {

   // Have tried this With and without the + before the $ as well
   if(preg_match("/^[0-9]{3}\-[0-9]{3}\-[0-9]{3}\-[0-9]{5}+$/", $value)) {
      echo "Yeah match Elm: ".$value."<br />"; 
   } else {
      echo "Boo Hoo Elm: '".$value."'<br />";  
   }
}

hanno anche cercato

/^\d{3}\-\d{3}\-\d{3}\-\d{5}+$/

            //With and without the + before the $

Sono tutti falliscono con Boo Hoo; (

EDIT:

var_dump($elem)

array(3) { [0]=>  string(1) "c" [1]=>  string(0) "" [2]=>  string(36) "123-123-123-12345" }
È stato utile?

Soluzione

Cercando di questo codice:

$value = '123-123-123-12345';

if(preg_match("/^[0-9]{3}\-[0-9]{3}\-[0-9]{3}\-[0-9]{5}+$/", $value)) {
    echo "Yeah match Elm: ".$value."<br />"; 
} else {
    echo "Boo Hoo Elm: '".$value."'<br />";  
}

(Non sono sicuro del \ sono utili - ma non sembra causare alcun problema, in questo caso particolare)

ottengo:

Yeah match Elm: 123-123-123-12345

E con questo:

$value = '123-123-1a-123';

ottengo:

Boo Hoo Elm: '123-123-1a-123'

L'espressione regolare realtà non sembra funzionare per me?


Può fornire un po 'più di codice? O forse usare:

var_dump($elem);

potrebbe essere utile, per verificare se contiene davvero quello che vi aspettate?

Altri suggerimenti

La prego di fornire alcune serie di test con i dati (serializzato sarebbe meglio) come non riesco a riprodurre questo comportamento.

$elem = array ('123-123-123-12345');

foreach($elem as $key=>$value) {

   // Have tried this With and without the + before the $ as well
   if(preg_match("/^[0-9]{3}\-[0-9]{3}\-[0-9]{3}\-[0-9]{5}+$/", $value)) {
      echo "Yeah match Elm: ".$value."<br />"; 
   } else {
      echo "Boo Hoo Elm: '".$value."'<br />";  
   }
}

risultato:  Sì abbinare Elm: 123-123-123-12345

Anche i backslash non sono necessari nell'espressione regolare. I trattini solo bisogno di essere sfuggito in [] gruppi se non sono il primo carattere ([-a-z] sarebbe partita "- O a-z", ma [a-z] corrisponde a "una o \ o z").

--- EDIT ---

Ok, quindi l'unica cosa che non riesco a capire che cosa è la codifica stai usando?

string(36) "123-123-123-12345"

36 byte ... Il più vicino che ho è UTF-16, ma ha ottenuto solo 34 byte. Allora, qual è la codifica che si sta utilizzando?

Si può anche provare a convertire la stringa UTF-8 prima corrispondenza con l'espressione regolare. (Provate anche utilizzando il parametro 'u' in regexp: '/ somreg \ d / u', dopo la conversione in UTF-8)

Utilizzare doppi backslash. \

Ummmmmm ....

Nella tua modifica si sta parlando di $ array e nel vostro ciclo su $ elem .

Che potrebbe essere il problema?

Modifica:? A proposito, c'è qualcosa di strano con i tuoi dati, io conto solo 17 caratteri quindi perché si sta dando una stringa (36)

Impossibile replicare. Il tuo codice funziona bene quando mi si incolla in un file.

Dal momento che il var_dump() mostra la stringa di destinazione è di 35 byte per una stringa di 15 caratteri, però, sembra che tu abbia problemi di codifica. Che cosa succede se si esegue l'espressione regolare contro utf8_decode($value) invece di $value?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top