Помощ за preg_match

bganonymous

Registered
Здравейте, как да направя следната проверка с preg_match: Дава грешка, ако потребителското име съдържа нещо различно от букви (на латиница), цифри или долни черти?
 
bganonymous каза:
Здравейте, как да направя следната проверка с preg_match: Дава грешка, ако потребителското име съдържа нещо различно от букви (на латиница), цифри или долни черти?
Извинявай, но можеше отдавна да си си отговорил на този въпрос ако беше потърсил в гугъл.
Първият резултат ти дава отговора.
 
teroristd каза:
Виж това
preg_match('/^([-a-z0-9_-])+$/i', $value);
Именно! Но без тиретата - т.е. без външните, вътрешните трябва да са там.
Иначе един по-кратък вариант е това:

PHP:
/* /^\w+$/i */
if(!preg_match('/^\w+$/i', $_POST['username']))
    die('Only letters, digits and underscores are allowed!');

И тъй като предвиждам въпроса "не искам името да започва с долна черта", ползвай това:

Код:
preg_match('/^[^_]\w+$/i', $username);

п.п.2 ако питаш и за минимална и максимална дължина - на мястото на плюса слагаш
{min,max}
тоест:
Код:
preg_match('/^[^_]\w{5, 12}$/i', $username);
Това ще изисква името да е дълго от 6 до 13 символа (а не от 5 до 12, защото преди \w имаме и една не-черта)
 
Има излишни неща. Модификаторите са излишни, а и две обратни проверки също. По-простичко:

if ( preg_match('/\W+/', $blabla) ) {
...
}
 
Значи:
Код:
preg_match('/^[^_]\w+$/i', $username);
позволява само букви, цифри и долни черти, нали така?
 
bganonymous каза:
Значи:
Код:
preg_match('/^[^_]\w+$/i', $username);
позволява само букви, цифри и долни черти, нали така?
Не, не, не, чакай, сега видях, това е грешно!!
Трябва да бъде

Код:
/^[a-z0-9]\w+$/

Kакто ламерко каза, модификаторите са излишни (в случая /i-то), защото \w матчва case-insensitive букви.
 

Back
Горе