PHP: controlla se i caratteri speciali di una list sono presenti in una string

Questa è una domanda da principianti.

Diciamo che ho una serie di caratteri illegali, cioè:

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

Avrei bisogno di controllare se qualcuno di questi caratteri è presente in una string, cioè

 $my_string = "abcde!fgh" 

Ho cercato su Google una soluzione per farlo in modo semplice ma non ho trovato alcuna risposta soddisfacente.

Qualsiasi aiuto su questo sarebbe molto apprezzato.

Un modo conciso per farlo con le tue due strutture dati sarebbe:

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

Questo ti dirà anche quanti dei caratteri speciali sono nella string.

In caso contrario, potresti scrivere un loop per la tua list di caratteri e sondare manualmente con strpos .

Il minimo sforzo sarebbe convertire la tua list di caratteri speciali in un regex charclass e testare la string.

Se stai solo cercando di abbinare tutti i caratteri non word, preg_match_all è probabilmente una soluzione migliore. Provaci.

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

\ W corrisponde a qualsiasi carattere non parola e {1} specificato per afferrarne solo 1 e esce, usando preg_match_all invece di preg_match ottiene tutte le sezioni che corrispondono alla regex invece del solo primo.

Ora la variabile $ matches è una matrix che contiene tutti i caratteri non di parole. Se vuoi sapere quanti ne puoi fare

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

Se non ti interessa quanti, e vuoi solo controllare se ne contiene uno, puoi semplicemente usare un condizionale

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

Potete trovare qui le documentazioni . Speranza che aiuta.