PHP preg_match-이 동정인에 무슨 문제가 있습니까?
-
18-09-2019 - |
문제
값은이 형식 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
?