2012-06-20 6 views
0

글자, 숫자, 점, 하이픈, 아포스트로피 또는 공백 이외의 다른 문자열을 필터링해야합니다.PHP preg_match with 'does not work

문자, 숫자, 점, 하이픈 및 공백이있는 문자열은 테스트를 통과하지만 아포스트로피가 포함되어 있으면 실패합니다. (도트와 하이픈의 이스케이프 문자는 아무런 차이가없는 것처럼 보이므로 확실하게 넣으려고합니다.)

이것에 대한 의견이 있으십니까?

if (preg_match("/[^a-zA-Z0-9\.\-\'\\s]/", $some_var)){ 
    echo "Invalid characters"; 
} 
+1

이러한 문자를 이스케이프 할 필요가 없습니다. '-'는 클래스의 맨 처음/끝으로 간단히 이동할 수 있습니다. – ThiefMaster

+0

\\ s가 맞지 않음 –

답변

1

당신의 대답은 인해 일부 문자의 이스케이프에 컴파일되지 않습니다 (전는 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"; 
} 
+0

참으로 슬래시 때문입니다. –

0

이 시도 :

if (preg_match("/[^a-zA-Z0-9.'\s-]/", $some_var)){ 
     echo "Invalid characters"; 
} 
+0

여전히 동일 :/ –

+3

* "사용해보기 :"*는 [subpar answer decoration]입니다 (http://stuck.include-once.org/#help10). 대신 * 귀하의 코드가하는 일, * 왜 * 당신이 그것을 권하고 싶은지, * 어떻게 * 결론에 도달했는지에 대한 슬림 한 설명을 추가하십시오. – mario