당신의 대답은 인해 일부 문자의 이스케이프에 컴파일되지 않습니다 (전는 preg_match 함수로 전달 된 문자열의 일부로서 탈출). 당신은 간단하게 할 수 있도록,
if (preg_match("/[^a-zA-Z0-9\\.\\-\\'\s]/", $some_var)){
echo "Invalid characters";
}
하지만, 점, 하이픈 및 아포스트로피를 탈출이 필요하지 않습니다 :
당신은 이중 이스케이프를 시도 할 수
if (preg_match("/[^a-zA-Z0-9.'\s-]/", $some_var)){
echo "Invalid characters";
}
참고 하이픈 끝으로 이동되어, 그래서 그것은 문자 범위로 착각하지 않습니다. 개인적으로, 필자는 다른 개발자가 실수로 목록 끝에 새로운 문자를 추가하여 예기치 않은 동작을 일으키는 것을 방지하기 위해이를 이스케이프하는 것을 선호합니다.
: 그럼.
if (preg_match("/[^a-zA-Z0-9.\\-'\s]/", $some_var)){
echo "Invalid characters";
}
마지막으로, 당신이 입력합니다 ($some_var
변수)를 확인 할 수 있습니다 - PHP는 때때로 (예를 들어, 사용자 유형이 추가됩니다으로이 실제로 백 슬래시를 포함 않는다 "할 수 없습니다 ","can \ 't "로 전송됩니다. 먼저 stripslashes
이 필요할 수 있습니다.
예 :
if (preg_match("/[^a-zA-Z0-9.\\-'\s]/", stripslashes($some_var))){
echo "Invalid characters";
}
이러한 문자를 이스케이프 할 필요가 없습니다. '-'는 클래스의 맨 처음/끝으로 간단히 이동할 수 있습니다. – ThiefMaster
\\ s가 맞지 않음 –