Pregunta

Los valores serán en este formato 123-123-123-12345 que me gustaría que el preg_match para trabajar. ¿Puede usted ver algo erróneo en expresiones regulares?

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 />";  
   }
}

También han intentado

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

            //With and without the + before the $

Todos ellos fallan con Boo Hoo; (

EDIT:

var_dump($elem)

array(3) { [0]=>  string(1) "c" [1]=>  string(0) "" [2]=>  string(36) "123-123-123-12345" }
¿Fue útil?

Solución

Tratando este código:

$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 />";  
}

(No estoy seguro de la \ son útiles - pero no parece causar ningún problema, en este caso particular)

Me sale:

Yeah match Elm: 123-123-123-12345

Y con esto:

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

Me sale:

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

La expresión regular parece realmente a trabajar para mí?


Podría dar un poco más de código? O tal vez usar:

var_dump($elem);

podrían ser útiles, para comprobar si realmente contiene lo que se esperaba?

Otros consejos

¿Podrían presentar alguna serie de pruebas con los datos (serializado sería lo mejor) ya que no puedo reproducir este comportamiento.

$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 />";  
   }
}

Resultado:  Sí coincidir Elm: 123-123-123-12345

Además, no se necesitan las barras invertidas en la expresión regular. Los guiones sólo tienen que ser escapado en [], si éstas no son el primer carácter ([-a-z] se correspondería con "- O a-z", pero [a-z] se correspondería con "una o \ o Z").

--- --- EDITAR

Ok, por lo que la única cosa que no puedo entender es qué codificación está utilizando?

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

36 bytes ... El más cercano que tengo es UTF-16, pero tiene sólo 34 bytes. Entonces, ¿cuál es la codificación que está utilizando?

También puede tratar de convertir la cadena en UTF-8 antes de la combinación con la expresión regular. (También intente utilizar el parámetro 'u' en la expresión regular: '/ somreg \ d / u', después de la conversión a UTF-8)

Utilice barras invertidas dobles. \

Ummmmmm ....

En su edición se habla de $ array y en su bucle sobre $ elem .

¿Podría ser el problema?

Editar:? Por cierto, hay algo extraño con sus datos, cuento sólo 17 caracteres ¿por qué se está dando una cadena (36)

incapaz de replicarse. Su código funciona bien cuando lo pega en un archivo.

Debido a que su var_dump() muestra su cadena de destino es de 35 bytes para una cadena de 15 caracteres, sin embargo, parece como si tuviera problemas de codificación. ¿Qué ocurre si se ejecuta la expresión regular contra utf8_decode($value) en lugar de $value?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top