PHP preg_match - bu ne RegEx'in nesi var?

5 Cevap php

Değerler, ben çalışmak preg_match istiyorum bu formatta 123-123-123-12345 olacaktır. Bu regex ile yanlış bir şey görebiliyor musun?

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

Ayrıca denedim

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

            //With and without the + before the $

Hepsi Boo Hoo ile başarısız; (

EDIT:

var_dump($elem)

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

5 Cevap

Bu kod çalışıyor:

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

(Not sure the \ oldukça kullanışlı -) ancak bu özel durumda, herhangi bir sorun neden görünmüyor

Alıyorum:

Yeah match Elm: 123-123-123-12345

Ve bu:

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

Alıyorum:

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

Regex aslında benim için çalışmıyor gibi görünüyor?


Could you provide a bit more code ? Or maybe use :

var_dump($elem);

gerçekten ne bekliyoruz olup olmadığını kontrol etmek, yararlı olabilir?

Ben bu davranışı yeniden edemiyor gibi veri ile bazı test dizisi (tefrika iyi olurdu) verebilir misiniz.

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

result: Yeah match Elm: 123-123-123-12345

Ayrıca ters eğik normal ifadede gerekli değildir. (-, Ama [az] "a veya \ veya z" maç olacak "YA az" [az-] maç olurdu) ilk karakteri değilse tire sadece [] gruplar halinde kaçan gerekir.

--- EDIT ---

Tamam, ben anlayamıyorum tek şey ne kodlama kullanıyor olmasıdır?

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

36 bayt ... I got yakın UTF-16, ama sadece 34 bayt var. Yani kullandığınız kodlama nedir?

Ayrıca regexp ile eşleşen önce utf-8 dize dönüştürmek için deneyebilirsiniz. (Ayrıca düzenli ifade 'u' parametresini kullanmayı deneyin: '/ somreg \ d / u', utf-8 dönüştürme sonra)

Çift eğik çizgi kullanabilirsiniz. \

Ummmmmm ....

Düzenlemeden size $array hakkında ve $elem hakkında döngü konuşuyor.

Bu sorun olabilir?

Edit: arada, veri ile garip bir şey var, ben sadece 17 karakter öyleyse neden (36) bir dize veriyor sayım?

Çoğaltmak için açılamıyor. Ben bir dosyaya yapıştırın zaman kod çalışıyor.

Için var_dump() hedef dize 15 karakter dizesi için 35 byte gösterir beri kodlama sorunları var gibi olsa da, bu görünüyor. Eğer utf8_decode($value) yerine $value ye karşı regex çalıştırırsanız ne olur?