영문자와 공백 만 허용하고 싶으므로 다음을 사용합니다.preg_replace가 밑줄을 대체하지 않습니다.
$name = preg_replace('/[^a-zA-z0-9 ]/', '', $str);
그러나 허용하지 않는 밑줄 "_"이 허용됩니다. 왜 그런가요? 어떻게 수정합니까?
감사
영문자와 공백 만 허용하고 싶으므로 다음을 사용합니다.preg_replace가 밑줄을 대체하지 않습니다.
$name = preg_replace('/[^a-zA-z0-9 ]/', '', $str);
그러나 허용하지 않는 밑줄 "_"이 허용됩니다. 왜 그런가요? 어떻게 수정합니까?
감사
character class 범위는 두 개의 코드 포인트 사이의 문자 범위입니다. 문자 _
의 범위 A-z
에 포함되어, 당신은 ASCII 테이블을보고이를 볼 수 있습니다
... Y Z [ \ ]^_ ` a b ...
그래서 그것뿐만 아니라 통해하자되고있는 밑줄하지만 명시된 바와 같이 그 다른 문자를 사용하면, 위의 내용 참조 documentation :
당신은 당신의 캐릭터 클래스에서 하나의 문자 범위의 대소 문자를 구분 일치를 수행 할 수 있습니다, 이런 일이 발생을 방지하기위한 방법은 다음과 같습니다범위는 ASCII 조합 순서로 작동합니다. ... 예를 들어,
[W-c]
은[][\^_
'wxyzabc]
과 같습니다.
$name = preg_replace('/[^a-z0-9 ]/i', '', $str);
당신은 당신의 표현에 실수가있다. 마지막 Z는 반드시 자본이어야합니다.
$name = preg_replace('/[^a-zA-Z0-9 ]/', '', $str);
^
아하 좋은 답변입니다. 감사! – Ally