Pergunta

Os valores estarão neste formato 123-123-123-12345 que eu gostaria que o Preg_match trabalhasse. Você pode ver algo errado com este 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 />";  
   }
}

também tentei

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

            //With and without the + before the $

Todos eles falham com o boo hoo; (

EDITAR:

var_dump($elem)

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

Solução

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

(Não tenho certeza do \ são úteis - mas eles não parecem causar problemas, neste caso em particular)

Eu recebo :

Yeah match Elm: 123-123-123-12345

E com isso:

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

Eu recebo :

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

O Regex realmente parece funcionar para mim?


Você poderia fornecer um pouco mais de código? Ou talvez use:

var_dump($elem);

Pode ser útil, para verificar se realmente contém o que você está esperando?

Outras dicas

Você poderia fornecer alguma matriz de teste com os dados (serializados seriam melhores), pois não posso reproduzir esse 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 />";  
   }
}

Resultado: Sim Match Elm: 123-123-123-12345

Além disso, as barras de barriga não são necessárias na expressão regular. Os traços só precisam ser escapados em grupos [] se não forem o primeiro caractere ([-AZ] corresponderia "- ou AZ", mas [AZ] corresponderia a "A ou ou Z").

--- Edit ---

Ok, então a única coisa que não consigo entender é o que você está usando?

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

36 bytes ... o mais próximo que cheguei é o UTF-16, mas obteve apenas 34 bytes. Então, qual é a codificação que você está usando?

Você também pode tentar converter a string para UTF-8 antes de corresponder com o Regexp. (Tente também usar o parâmetro 'u' no regexp: '/somreg d/u', depois de converter para o UTF-8)

Use barrafas duplas.

Ummmmmm ....

Em sua edição, você está falando $ matriz E em seu loop sobre $ elem.

Esse poderia ser o problema?

Editar: A propósito, há algo estranho com seus dados, conto apenas 17 caracteres, então por que está dando uma string (36)?

Incapaz de replicar. Seu código funciona bem quando eu o colo em um arquivo.

Desde o seu var_dump() Mostra que sua sequência de destino é de 35 bytes para uma string de 15 caracteres, porém, parece que você tem problemas de codificação. O que acontece se você correr o regex contra utf8_decode($value) ao invés de $value?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top