2014-03-13 7 views
0

이것은 초보자 용 질문입니다.PHP : 목록의 특수 문자가 문자열에 있는지 확인하십시오.

의 내가, 불법 문자의 배열을 가지고 있다고 가정 해 봅시다 예 :

$special_chars = array("?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}"); 

이러한 문자 즉, 내가 검색 좀

$my_string = "abcde!fgh" 

문자열에있는 경우 내가 확인해야 간단한 방식으로이 작업을 수행하는 솔루션에 대해서는 만족스러운 대답을 찾지 못했습니다.

이 문제에 대한 도움을 주시면 감사하겠습니다.

답변

4

당신이 개 데이터 구조와 함께 할 수있는 간결한 방법은 다음과 같습니다 또한 당신을 말할 것

count(array_intersect(str_split($my_string), $special_chars)) 

에서는 특수 문자의 많은 문자열에 있습니다.

문자 목록에 대한 루프를 작성하고 수동으로 strpos으로 프로브 할 수 있습니다.

최소한의 노력은 특수 문자 목록을 정규식 charclass로 변환하고 문자열에 대해 테스트하는 것입니다.

0

모든 단어가 아닌 문자를 모두 일치시키려는 경우에는 preg_match_all이 더 나은 해결책 일 수 있습니다. 시도 해봐.

preg_match_all('/[\W]{1}/',$my_string, $matches); 

는 \ W는 비 단어 문자와 일치하고는 {1}으로, preg_match_all 대신는 preg_match의 사용, 단 1 그들을 잡아 종료 지정된 대신 첫 번째의 정규 표현식과 일치하는 모든 섹션을 가져옵니다.

이제 $ matches 변수는 모든 비 단어 문자를 포함하는 배열입니다. 당신은 당신이 얼마나 많은 당신은 상관하지 않는 경우

$numSpecialCharacters = preg_match_all('/[\W]{1}/',$my_string); 

를 수행하고 그냥 하나를 포함하고 있는지 확인 할 수있는 방법을 많이 알고 싶다면, 당신은 사용할 수있는 조건

if($numSpecialCharacters === false) 
    //something went wrong. 
elseif($numSpecialCharacters > 0) 
    //the string contains special characters 

도움이되는 자료는 here입니다.

관련 문제