beste leden,

M`n regex is niet al te goed, dus vandaar dat ik hier kom:

Ik heb nu dit:

<?
function valSafeString ($str)
{
	return (!preg_match("/^([^a-zA-Z0-9_-])+$/i", $str)) ? false : true;
}
?>


Waarom geeft deze een false terug bij valSafeString("Merijn"); ?
Of eigenlijk elke willekeurige tekst. Door de bomen zie ik het bos even niet meer..

Iemand een idee?
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.

Stomme regex shit.
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)
/^[a-zA-Z0-9_-]+$/
Hmmmz ik ga het uitproberen dan! bedankt alvast :)

Reageren