PHP: проверка наличия специальных символов из списка в строке

Это вопрос новичков.

Допустим, у меня есть массив недопустимых символов, то есть:

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

Мне нужно будет проверить, присутствует ли какой-либо из этих символов в строке, т. Е.

 $my_string = "abcde!fgh" 

У меня есть googled для решения, чтобы сделать это простым способом, но не нашли удовлетворительного ответа.

Любая помощь по этому поводу будет высоко оценена.

Краткий способ сделать это с вашими двумя структурами данных будет:

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

Это также расскажет вам, сколько из специальных символов в строке.

В противном случае вы могли бы написать цикл для вашего списка символов и вручную зондировать с помощью strpos .

Наименьшее усилие будет превращать ваш специальный список символов в chargeass регулярного выражения и тестировать его по строке.

Если вы просто пытаетесь сопоставить все символы без слов, preg_match_all, вероятно, является лучшим решением. Попробуйте.

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

\ W соответствует любому символу, отличному от слова, и {1}, указанному для захвата только 1 из них, и завершает работу, используя preg_match_all вместо preg_match получает все разделы, которые соответствуют регулярному выражению, а не только первый.

Теперь переменная $ matches представляет собой массив, содержащий все символы, отличные от слова. Если вы хотите знать, сколько вы можете сделать

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

Если вам все равно, и просто хотите проверить, содержит ли он один, вы можете просто использовать условный

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

Здесь вы можете найти документацию. Надеюсь, что это поможет.