Die ^ tussen je blokhaakjes betekent "alles behalve". Dus dat stukje [^a-zA-Z0-9_-] matcht alles behalve a-zA-Z0-9_-.
Die ronde haakjes heb je trouwens niet nodig. Die zijn om matches te onthouden, zodat je er later naar terug kan referen via $1 etc in de expressie zelf.
ja dat snap ik, maar kijk: ik wil dus checken of die [^ regex] niet matched tegen de expressie, de eerste ^. Als dit dus een error geeft, krijg je die false terug.
Maar het stomme is, als ik dit doe: "/^([-a-z0-9_-])+$/i"
matched hij wel alles, zolang ik geen hoofdletters op geef.
Jep, maar beginnen met ^ en eindigen met $ betekent dat heel $str moet voldoen aan de expressie. Laat je die twee weg, dan zoekt hij ook binnen $str en hoeft maar een deel te voldoen.
Dus of zo en als de expressie dan matcht, zit er een illegaal karakter in
/[^a-zA-Z0-9_-]+/
Of zo en als de expressie dan matcht, bestaat de invoer uit alleen één of meer legale karakters. (immers die plus betekent match 1 of meer keer)