Запрет пробела Eregi

  • Автор темы emeraudx
  • Дата начала
E

emeraudx

#1
Помогите запретить пробел. Такая функция:

if ( !empty( $login ) and !eregi( "[-_0-9a-zA-Zа-яА-Я]+", $login ) )
$error = $error.'<li class="error_text">поле "логин" содержит недопустимые символы</li>'."\n";

Я хочу, чтобы пользователь, который хочет зарегиться, не смог поставить пробел между словами. НЕ ПУТАЙТЕ! Мне не нужно, чтобы пробел был именно между словами, а не в начале и в конце слова, который можно обрезать с помощью функции trim.

1) "пробел\логин\пробел" - можно, т.к. эти пробелы обрезает trim
2) "логин\пробел\продолжение логина" - вот этот пробел я хочу запретить.

Как быть, кто знает?
 

hosm

* so what *
18.05.2009
2 442
6
#2
странно как-то...
так если пробел всё равно тримаете, то зачем его разрешать вводить? :)

Добавлено: я разделом не ошиблась при переносе темы?
 
E

emeraudx

#3
trim удаляет только правый или левый пробел, пробел между словами он не удаляет.
Вот я и хочу, чтобы пользователю выводилась ошибка, если он поставил пробел между словами
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#4
Пробелы описываются либо литералом, просто в условии поиска ставьте пробел, либо видимой комбинацией символов: \s
ЗЫ
\s - если вы в условии поиска поставите друг за другом символ обратного слеша, а после него сразу букву s, то таким образом вы опишите либо пробел, либо символ табуляции. Конечно в условии поиска можно поставить пробел так, как вы его обычно ставите на письме, но запись [a-z\s] будет намного понятнее и читабельней чем [a-z ], с первого взгляда видно, что в первый символьный класс входит пробел, а вот со вторым символьным классом надо присмотреться, а так как регулярные выражения итак представляют для многих набор значков, то пропустить пробел, поставленный таким образом будет очень просто. Внимательно используйте этот спецсимвол, так в дополнении к тому, что он совпадает с пробелом и табулятором, он совпадет также с символом новой строки.
\S - скажу просто, что в своем большинстве это видимые символы, т.е. все, что не совпадает с \s
\w - спецсимвол, который призван заменить целый символьный класс, в него входят все символы, которые могут входить в слово, обычно это [a-zA-Z_], хотя много может зависеть от установленной локали, поддержки юникода и т.д.
\W - все что не входит в определение \w. либо [^a-zA-Z_]
\d - все цифры т.е. уже известный вам символьный класс [0-9]
\D - все, что не является цифрой
 
A

amsokol

#5
Попробуй так

if ( !empty( $login ) and !eregi( "^[а-яА-Яa-zA-Z0-9\-_]{3,20}$", $login ) )
$error = $error.'<li class="error_text">поле "логин" содержит недопустимые символы</li>'."\n";

Минимум 3 максимум 20 символов