2014-02-06 3 views
0

저는 얼마 전 PHP로 쓴 Javascript로 변환하려고합니다. 이 스크립트는 é와 같은 특수 문자를 e, ú와 u 등으로 대체합니다.regex가 모든 문자를 제거합니다.

처음 파트가 작동합니다. 그러나, 결국 모든 문자가 제거되었는지 확인하는 줄이 있습니다. 이 마지막 부분은 작동하지 않습니다.

는 여기있다 : 이제

if ($str != preg_replace("/[^a-zA-Z \-]+/g","",$str)) { 
    echo "error: ".$str." - ".preg_replace("/[^a-zA-Z \-]+/g","",$str); 
} 

내가이 점에 도달하기 전에 다음 $ str을, 예를 들어 $str = "Péter"; 실행 스크립트가 "베드로"입니다 해주면 내가 말했듯이. 그러나 어떤 경우에, 나는이 출력 얻을 : 내 자바 스크립트와 같은 정규식을 사용하기 때문에,

error: Peter - 

나는이 될 수있는 방법을 궁금해하고 거기에 작동합니다.

+0

'é'에서'e'로 어떻게 변환합니까? 그것은 정말로'Péter'에서'Peter'까지가는가요? – sln

+0

'preg_replace()'는 분명히 빈 문자열을 반환하기 때문에''Peter '! =' ''는 참일 것입니다.이 경우 오류는 echo'd가됩니다 –

+0

@MichaelWheeler 예, 그건 질문이 아닙니다. 질문은 빈 상태로 돌아 오는 이유는 무엇이며, 방금 대답을 얻었습니다. 아래를 참조하십시오. – koljanep

답변

2

PHP 때문에 잘못된 패턴 (당신이 결과에 var_dump로이를 확인할 수) null을 반환 preg_replace을 일으키는, 전혀 /g 수정을 인식하고 경고를 트리거하지 않습니다.

/g을 제거하면 코드가 예상대로 작동합니다. preg_replace은 이미 패턴의 모든 항목을 대체하기 때문에 여전히 자바 스크립트 버전과 동일하게 작동합니다.

+0

이것이 어떻게 문제가 될지 모르겠습니다. 스크립트가 다음을 비교하는 경우 : if ("Peter! = preg_replace ("/ [^ a-zA-Z \ -] +/g "," ","Peter ") {}, 어떻게 될 수 있습니까? 모든 문자를 제거합니까? "e"가 "e"또는 "P"가 "P"와 같은 것으로 간주되지 않는다는 것을 의미합니까? 설명해주십시오. – koljanep

+0

@koljanep : 죄송합니다. 실수였습니다. 꽤 생각하지 마라. 문제는 PHP가'/ g' 수정자를 인식하지 못한다는 것이다. (그것도 필요하지 않다.) – Jon

+0

''g '를 제거하면 완벽하게 작동한다. – koljanep

관련 문제