A través del siguiente script, se revisa cada letra o carácter de una cadena y se le compara con cada row de un array. Si se es igual al row, osea, hay un carácter inválido, se da por falso.

A través del siguiente script, se revisa cada letra o carácter de una cadena y se le compara con cada row de un array. Si se es igual al row, osea, hay un carácter inválido, se da por falso.

Esto lo hice hoy porque hoy mismo «descubrí» que se puede tratar a una cadena como un array…

Y como un script vale mas que mil palabras (esta me la inventé yo ), aquí va:
 

Código:
 	32, 1=>33 ); $str = "Hola amigo!"; $long = strlen ($str)-1; for ($i = 0; $i <= $long; $i++) { for ($x = 0; $x <= count($inv); $x++) { if (ord ($str[$i]) == $inv[$x]) { $malo = true; } } } if ($malo) { echo "Cadena con carácteres inválidos!"; } else { echo "Cadena correcta"; } ?>

La función ord() es para obtener el ASCII de un carácter.

Como podrán darse cuenta, en el array están los ASCII del espacio (  ) y del signo de exclamación ( ! ). Aquí les dejo la lista de carácteres ASCII, que podrían ser considerados inválidos.
 

Citar
32 ->  (espacio)
33 -> !
34 -> «
38 -> &
39 -> '
40 -> (
41 -> )
42 -> *
45 -> –
46 -> .
47 -> /
58 -> :
59 -> ;
60 -> <
61 -> =
62 -> >
63 -> ?
91 -> [
92 ->
93 -> ]
94 -> ^
123 -> {
124 -> |
125 -> }
126 -> ~