2016-02-11 3 views
0

Например, я хочу .brewpixels и brewpixels. эхаКак сделать строку недействительной, если она начинается или заканчивается точкой?

имени пользователя недействительно

Если точка находится где-то между первой и последней буквой сценарий должен повторить

имени пользователя является хорошим

Как d o Я изменяю свое регулярное выражение, чтобы выполнить это?

$username = 'brew.pixels'; 

if(preg_match('/(^\d|[^\w])/', $username)){ 
    echo 'your username is invalid'; 
} else { 
    echo 'your username is good'; 
} 
+1

http://php.net/manual/en/function.mb-substr.php – peixotorms

+2

Также: http://stackoverflow.com/questions/24340969/regular-expression-to-match-first-and-last -character – peixotorms

+0

'(^ (\. \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ w \)} | ([\ d \ w] \.)? $)' – dockeryZ

ответ

3

Ниже будут соответствовать строки, которые начинаются или заканчиваются точкой

(хитрость заключается в том, чтобы избежать точки, поскольку она имеет особое значение в регулярном выражении)

/^\.|\.$/ 

DEMO

С дополнительными условиями only alpha num underscore and dot within the body:

/^(\.[\w.]+|[\w.]+\.)$/ 

DEMO

Просто заменить в вашем данном коде:

if(preg_match(regexToMatchBadWords, $username)){ 
    echo 'your username is invalid'; 
} else { 
    echo 'your username is good'; 
} 

Или, вы можете сопоставить непосредственно правильные слова, заставляя первые & последних символы, чтобы быть альфа-Num-подчеркивание и внутреннее тело для принятия точек также:

/^(\w[\w.]+\w)$/ 

DEMO

Что меняет логику в вашем коде:

if(preg_match(/^(\w[\w.]+\w)$/, $username)){ 
    echo 'your username is good'; 
} else { 
    echo 'your username is invalid'; 
} 
+0

Это работает, но я теряю функциональность. Регулярное выражение, которое я предоставил, допускает только буквенно-цифровые символы и символы подчеркивания. Я хочу, чтобы последнее регулярное выражение делало то же самое и предотвращало точки в начале и в конце строки. – brewpixels

+0

@brewpixels Вы разрешаете символы альфаNum + подчеркивание + точки в теле справа? – Enissay

+0

Да, это правильно. Но символы alphNum и подчеркивание могут быть вне тела. – brewpixels

1

Я не уверен, если вы говорите, что вы хотите иметь другую регулярок информацию, но вы можете сделать:

if (preg_match('/^\./', $username) || preg_match('/\.$/', $username) { 
    echo 'invalid'; 
} 

Этот сделают .brew и варят. потерпеть неудачу.

Я забыл о характере трубы, см. Ответ Enissays для правильного более простого способа.