Oh, natürlich absolut richtig. Zuerstmal: die Schreibweise hat keine weiteren Vorteile, lediglich einen vereinfachten Code. Denn der Trinär Operator ist ja quasi ein If/Else Statement und damit false/true zurückzugeben ist irgendwie 'doppelt gemoppelt'.
Der vorherige Ausdruck funktioniert nicht, weil bereits ein gültiges Zeichen aus der Klasse genügt um, den Ausdruck wahr zu machen. (Außerdem fehlt ein Quantifizierer) Es gibt also 2 Möglichkeiten:
1. Falsifizierung wie in deinem letzten Posting oder
2. Einen reg. Ausdruck der die
gesamte zu durchsuchende Zeichenkette vergleicht. Das ist möglich durch Umschließen des Audrucks mit ^ und $. Hier kann man statt + auch eine Mindestanzahl von Zeichen angeben, ein echter Mehrwert.
Zusammenfassend liefern diese Ausdrücke das selbe Ergebnis:
PHP-Code:
<?
// ermittle Zeichen der Klasse von Anfang bis Ende
return (1 === preg_match('/^[a-z0-9]+$/i', $string));
// ermittle ein Zeichen das nicht der Klasse angehört
return (1 !== preg_match('/[^a-z0-9]/i', $string));