문제

값은이 형식 123-123-123-12345로, preg_match가 작동하기를 원합니다. 이 동선에 문제가있는 것을 볼 수 있습니까?

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

시도했습니다

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

            //With and without the + before the $

그들은 모두 부 호와 함께 실패합니다. (

편집하다:

var_dump($elem)

array(3) { [0]=>  string(1) "c" [1]=>  string(0) "" [2]=>  string(36) "123-123-123-12345" }
도움이 되었습니까?

해결책

이 코드 시도 :

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

(확실하지 않습니다 \ 유용합니다. 그러나 그들은이 특별한 경우에 어떤 문제도 일으키지 않는 것 같습니다)

나는 얻다 :

Yeah match Elm: 123-123-123-12345

그리고 이것으로 :

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

나는 얻다 :

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

Regex는 실제로 나를 위해 효과가있는 것 같습니까?


좀 더 많은 코드를 제공 할 수 있습니까? 또는 사용 :

var_dump($elem);

유용 할 수 있습니다. 실제로 기대하는 내용이 포함되어 있는지 확인하십시오.

다른 팁

이 동작을 재현 할 수 없으므로 데이터 (직렬화 된 것이 가장 좋음)와 함께 테스트 배열을 제공해 주시겠습니까?

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

결과 : 예 매치 ELM : 123-123-123-12345

또한 정규 표현에서는 뒷발이 필요하지 않습니다. 대시는 첫 번째 문자가 아닌 경우 ([-az]가 일치하는 "- 또는 az", [az]가 "a 또는 또는 z")와 일치하는 경우 [] 그룹에서만 탈출하면됩니다.

--- 편집하다 ---

좋아, 내가 이해할 수없는 유일한 것은 어떤 인코딩을 사용하고 있습니까?

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

36 바이트 ... 내가 가장 가까운 것은 UTF-16이지만 34 바이트 만 얻었습니다. 그렇다면 사용중인 인코딩은 무엇입니까?

REGEXP와 일치하기 전에 문자열을 UTF-8로 변환 할 수도 있습니다. (UTF-8로 변환 한 후 Regexp : '/somreg d/u'에서 'u'매개 변수를 사용해보십시오)

이중 배가를 사용하십시오.

음 ....

당신의 편집에서 당신은 이야기하고 있습니다 $ 배열 그리고 당신의 고리에 $ elem.

그것이 문제 일 수 있습니까?

편집하다: 그건 그렇고, 당신의 데이터에 이상한 것이 있습니다. 나는 17 자만 계산하므로 왜 문자열을 주는가? (36).

복제 할 수 없습니다. 파일에 붙여 넣을 때 코드가 잘 작동합니다.

당신이 이래 var_dump() 대상 문자열이 15 자 문자열의 경우 35 바이트임을 보여 주지만 인코딩 문제가있는 것처럼 보입니다. 당신이 Regex를 달리면 어떻게됩니까? utf8_decode($value) 대신에 $value?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top