2013-06-11 3 views
4

영문자와 공백 만 허용하고 싶으므로 다음을 사용합니다.preg_replace가 밑줄을 대체하지 않습니다.

$name = preg_replace('/[^a-zA-z0-9 ]/', '', $str); 

그러나 허용하지 않는 밑줄 "_"이 허용됩니다. 왜 그런가요? 어떻게 수정합니까?

감사

답변

1

character class 범위는 두 개의 코드 포인트 사이의 문자 범위입니다. 문자 _의 범위 A-z에 포함되어, 당신은 ASCII 테이블을보고이를 볼 수 있습니다

 
... Y Z [ \ ]^_ ` a b ... 

그래서 그것뿐만 아니라 통해하자되고있는 밑줄하지만 명시된 바와 같이 그 다른 문자를 사용하면, 위의 내용 참조 documentation :

범위는 ASCII 조합 순서로 작동합니다. ... 예를 들어, [W-c][][\^_ 'wxyzabc]과 같습니다.

당신은 당신의 캐릭터 클래스에서 하나의 문자 범위의 대소 문자를 구분 일치를 수행 할 수 있습니다, 이런 일이 발생을 방지하기위한 방법은 다음과 같습니다

$name = preg_replace('/[^a-z0-9 ]/i', '', $str); 
+0

아하 좋은 답변입니다. 감사! – Ally

0

당신은 당신의 표현에 실수가있다. 마지막 Z는 반드시 자본이어야합니다.

$name = preg_replace('/[^a-zA-Z0-9 ]/', '', $str); 
          ^
관련 문제