Это вопрос новичков.
Допустим, у меня есть массив недопустимых символов, то есть:
$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
Здесь вы можете найти документацию. Надеюсь, что это поможет.