Regulärer Ausdruck klappt nicht

Moin,
ein regulärer Audruck will mal wieder nicht so, wie ich will…

[php]
if(!preg_match(„#[a-z][a-z0-9]{2,29}#“,
saveUrl(‚ich bin ein kleiner mann mit einer glatze‘)))
echo ‚Passt schon‘;
[/php]Es gibt leider nichts aus.
Es soll geprüft werden, ob ein String zwischen 3 und 30 Zeichen lang ist, er darf nur aus a-z und 0-9 bestehen und muss mit einem Buchstaben beginnen. Die Funktion saveUrl entfernt nur die Leerzeichen und macht alles lowercase.

Was ist daran falsch?

lg

Du musst angeben, dass der reguläre Ausdruck den gesamten String matchen muss. Mit ^…$. (Sonst würde die Funktion auch true zurückgeben, wenn nur die ersten 5 Zeichen oder so zur Regel passen.)

[php]<?php

function saveUrl($s)
{
return str_replace(’ ', ‚‘, strtolower($s));
}

if (preg_match(„#[1][a-z0-9]{2,29}$#“,
saveUrl(‚ich bin ein kleiner mann mit einer gl‘))
) {
echo ‚Passt schon‘;
}[/php]


  1. a-z ↩︎

Der Regex tut was er soll, er sucht nach einem Substring in dem Eingabestring, der mit einem Kleinenbuchstaben anfängt und dann mit 2 bis 29 Buchstaben weitergeht. Da regex standardmäßig greedy sind, matcht es hier „ichbineinkleinermannmiteinergl“.

Alternative:

[php]if(strlen($str) >= 3 && strlen($str) <= 30 && ord($str[0]) >= ord(„a“) && ord($str[0]) <= ord(„z“) && !preg_match(„/[^a-z0-9]/“, $str))
echo „Was auch immer du hier ausgeben willst“;[/php]
(ungetestet)

Ah, ist schon länger her, dass ich mich mit der Syntax beschäftigt habe…
Danke für die Hilfe! :wink: