Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Нужна помощь с ограничением количества символов в regexp

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Инсеин
Отправлено: 09 Октября, 2011 - 11:20:31
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Доброе время суток !
Суть проблемы в том, что есть вот такое регулярное выражение
PHP:
скопировать код в буфер обмена
  1.  
  2. if(!preg_match('/^[a-zA-Zа-яА-Я][a-zA-Zа-яА-Я0-9\-][a-zA-Zа-яА-Я]+$/', $login))
  3.  


В него надо добавить возможность ставить пробел ... но только один раз ... пробывал сделать вот так:
PHP:
скопировать код в буфер обмена
  1.  
  2. if(!preg_match('/^([a-zA-Zа-яА-Я][a-zA-Zа-яА-Я0-9\-])([\s]{0,1})([a-zA-Zа-яА-Я0-9\-][a-zA-Zа-яА-Я])+$/', $login))
  3.  


Тогда пробел пропускает, но русские буквы если указать ... почему-то не пропускает Огорчение
Так же кто знает как ограничить количество одинаковых символов подряд ?
К примеру надо, чтоб не более двух одинаковых ... тогда "аааа" = false ... "ааыаа" = true

И последний вопрос ... как ограничить, чтобы можно было вводить и латинские буквы и русские ... но только или те или те ... к примеру если первая буква латинская, то и все остальные тоже должны быть латинские.


-----
Судя по ходу мыслей, вас постоянно преследуют глупости.
 
 Top
illy
Отправлено: 09 Октября, 2011 - 12:52:36
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




латынь и русич проверка это надо два условия
if(preg_match('/[a-z]/i', $login) && preg_match('/[а-яё]/i', $login)) exit;
а чтобы проверить одинаковые символы
$login='55526723433';
for($n=0;$n!=strlen($login)-2;$n++){
if($login[$n]==$login[$n+1] && $login[$n]==$login[$n+2]){
echo 'есть повторение';
exit;
}
}


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
f111
Отправлено: 09 Октября, 2011 - 21:36:01
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




illy ну и намудрил же ты

_________

1) "надо добавить возможность ставить пробел"

твой вариант работает, ^([\wа-яА-Я][\wа-яА-Я\d-])\s([\wа-яА-Я\d-][\wа-яА-Я])+$
"р- пп" - такой вариант пропускает

2) тут сложнее, но тоже решаемо.

3) ^(\w+|[а-яёА-ЯЁ]+)$

(Отредактировано автором: 09 Октября, 2011 - 21:49:57)

 
 Top
DlTA
Отправлено: 09 Октября, 2011 - 21:53:20
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




f111 пишет:
3) ^(\w+|[а-яёА-ЯЁ]+)$

на всякий случай еще добавте 'Йй' в [а-яёА-ЯЁ] иначе может не прохавать
 
 Top
f111
Отправлено: 09 Октября, 2011 - 22:01:56
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




DlTA пишет:
на всякий случай еще добавте 'Йй' в [а-яёА-ЯЁ] иначе может не прохавать
я так понимаю прежде чем оставить сообщение вы проверили?


тест

Инсеин, если устанете собирать РВ, поделитесь исходным текстом (всеми вариантами) и укажите что РВ должно пропустить, а что не должно)

(Отредактировано автором: 09 Октября, 2011 - 22:15:59)

 
 Top
DlTA
Отправлено: 10 Октября, 2011 - 01:12:27
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




f111 пишет:
я так понимаю прежде чем оставить сообщение вы проверили?

добавить пару символов не такая уж и большая работа, а выпасать почему на одном серваке работает а на другом нет куда напряжней.
 
 Top
Инсеин
Отправлено: 10 Октября, 2011 - 11:13:45
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




f111 пишет:
твой вариант работает, ^([\wа-яА-Я][\wа-яА-Я\d-])\s([\wа-яА-Я\d-][\wа-яА-Я])+$
"р- пп" - такой вариант пропускает


Мой вариант не работает ... вот только, что проверил ..

qwe- rt - пропустил
qwe rt - не пропустил
qwert - пропустил

С русскими буквами пропускает всё только без пробела если писать ... даже приблизительно понять не могу почему так Хм

f111 пишет:
^([\wа-яА-Я][\wа-яА-Я\d-])\s([\wа-яА-Я\d-][\wа-яА-Я])+$

Если не было апечатки, то в данном выражении можно ставить сколько угодно пробелов ... а надо не более одного ... ну или вообще без пробелов

illy Спасибо, буду пробывать Улыбка


-----
Судя по ходу мыслей, вас постоянно преследуют глупости.
 
 Top
f111
Отправлено: 10 Октября, 2011 - 11:57:11
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




DlTA пишет:
добавить пару символов не такая уж и большая работа, а выпасать почему на одном серваке работает а на другом нет куда напряжней.
тогда все 33, что бы "железно"))

Инсеин пишет:
qwe- rt - пропустил
qwe rt - не пропустил
qwert - пропустил
только что проверил, и все три твои варианта РВ не пропускает, как и должно.

Инсеин пишет:
/^([a-zA-Zа-яА-Я][a-zA-Zа-яА-Я0-9\-])([\s]{0,1})([a-zA-Zа-яА-Я0-9\-][a-zA-Zа-яА-Я])+$/
эта регулярка пропускает
первый символ который может быть как на кириллице так и на латинице, верхнего и нижнего регистра,
второй символ тоже обоих регистров на латинице и кириллице, а так же может быть цифрой или знаком тире,
третий это пробел (хотя в твоей регулярке он не правильно указан, или правильно Радость ...... если ты хотел сделать что бы пробел был один раз либо его не было, то надо использовать вопросительный знак - \s?),
четвёртый аналогичен второму
пятый аналогичен первому
вот только четвёртый и пятый могут повторяться более одного раза (но вместе, а не по отдельности), потому что в подшаблоне. (то есть 00фф не подойдёт, а 0ф0ф пропустит)


^([\wа-яА-Я][\wа-яА-Я\d-])\s?([\wа-яА-Я\d-][\wа-яА-Я])+$

пропускает:
qw errtrtrtrtrt
ff ffffffffffff
ап пппп
ф0фф
у- -у

(Отредактировано автором: 10 Октября, 2011 - 12:09:07)

 
 Top
Инсеин
Отправлено: 10 Октября, 2011 - 12:23:40
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




f111 пишет:
надо использовать вопросительный знак - \s?


Вот оно искомое )) ... Спасибо.
(Добавление)
f111 пишет:
пропускает:
qw errtrtrtrtrt
ff ffffffffffff
ап пппп
ф0фф
у- -у


Мда ... но вот только 3-х значные не пропускает почему-то ... такие как "qwe" или "dsf" ... хотя вроде ограничений на количество символов нету )


-----
Судя по ходу мыслей, вас постоянно преследуют глупости.
 
 Top
f111
Отправлено: 10 Октября, 2011 - 13:19:53
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Инсеин пишет:
но вот только 3-х значные не пропускает почему-то ... такие как "qwe" или "dsf"
повторюсь: судя по регулярке и не должно

Инсеин пишет:
хотя вроде ограничений на количество символов нету )
о каких словах речь? Радость

и ещё кое что напомню:
f111 пишет:
Инсеин, если устанете собирать РВ, поделитесь исходным текстом (всеми вариантами) и укажите что РВ должно пропустить, а что не должно)
(что РВ должно пропустить ~ какие строки)
 
 Top
Инсеин
Отправлено: 10 Октября, 2011 - 14:28:04
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




f111 что-то совсем меня уже запутал ))
Изначально было следующее
PHP:
скопировать код в буфер обмена
  1.  
  2. if(!preg_match('/^[a-zA-Zа-яА-Я][a-zA-Zа-яА-Я0-9\-][a-zA-Zа-яА-Я]+$/', $login))
  3. {
  4.    echo 'Неправильно указан логин !';
  5. }
  6. else
  7. {
  8.    // Тут дальше идёт проверка ... пароль, почта и всё остальное ... потом запись в БД
  9. }
  10.  


Затем я добавил возможность ставить пробел ... допустим чуть-чуть не правильно ... но исправил потом )) ... и всё.

Затем в поле "Логин" пишу следующее: "qwe" в ответ "Неправильно указан логин !" ... если добавить ещё одну букву то уже логин становится правильным. Далее проверяю русские буквы ... опять же в поле "Логин" пишу: "выав ываа" в ответ "Неправильно указан логин !" ... и вот теперь я уже совсем не понимаю что не так в регулярке !?! ))
(Добавление)
Мда ... забыл написать, что в последний раз подставлял уже твоё РВ ))

(Отредактировано автором: 10 Октября, 2011 - 14:28:23)



-----
Судя по ходу мыслей, вас постоянно преследуют глупости.
 
 Top
f111
Отправлено: 10 Октября, 2011 - 14:32:07
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




вы сами себя путаете, я уже объяснил что ищет РВ.

какие логины допустимы? (если можно, укажите все варианты)
 
 Top
Инсеин
Отправлено: 10 Октября, 2011 - 14:36:43
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




f111 пишет:
какие логины допустимы? (если можно, укажите все варианты)


Примеры допустимых логинов:
MyLogin
My Login
x-MyLogin-x
x-My Login-x
MyLogin2011
MyLogin 2011
My Login2011
MyLogin-2011
Логин
Мой логин
х-Логин-х
Логин 2011
Логин2011
Логин-2011

Вроде бы всё )
(Добавление)
Такие варианты тоже должны быть корректными:
Л1О2Г3И4Н
хх-Логин-хх
Ло2011гин

Проще написать так ... использовать можно буквы (кирилица и латиница) первый символ обязательно буква, можно использовать дефис но, чтоб он не был последним символом, можно использовать цифры, но только не с самого начала, можно использовать пробел, но только один раз или вообще не использовать.


-----
Судя по ходу мыслей, вас постоянно преследуют глупости.
 
 Top
f111
Отправлено: 10 Октября, 2011 - 14:51:19
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Инсеин пишет:
можно использовать пробел, но только один раз или вообще не использовать.
Радость

спасибо за логины. пойду шаманить Подмигивание


/^(\w[\d\w-]+\s?[\d\w-]+|[А-яёЁ][\dА-яёЁ-]+\s?[\dА-яёЁ-]+)[^-]$/
этот вариант если вспомнить:
Инсеин пишет:
как ограничить, чтобы можно было вводить и латинские буквы и русские ... но только или те или те


/^[\wА-яёЁ][\d\wА-яёЁ-]+\s?[\d\wА-яёЁ-]+[^-]$/
если и того и другого Радость

по поводу
Инсеин пишет:
ограничить количество одинаковых символов подряд

всё ещё думаю
(Добавление)
наверно вариант illy будет идеален Огорчение

(Отредактировано автором: 10 Октября, 2011 - 15:10:33)

 
 Top
Инсеин
Отправлено: 10 Октября, 2011 - 15:39:34
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




f111 пишет:
/^(\w[\d\w-]+\s?[\d\w-]+|[А-яёЁ][\dА-яёЁ-]+\s?[\dА-яёЁ-]+)[^-]$/

В этом РВ логин "ыва" ... результат: Совпадений не найдено.
Прикреплено изображение (Нажмите для увеличения)
1.png


-----
Судя по ходу мыслей, вас постоянно преследуют глупости.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB