Всем привет! Толи я туплю под вечер, толи не знаю чего... В общем никак не удаётся составить регулярное выражение. Нужно, чтобы регулярке удовлетворяла строка, в которой есть определённые символы в любой последовательности. Т.е., например, в ней должны присутствовать символы a, b и с - обязательно все. Последовательность - любая. Например, следующие строки должны пройти регулярку: abc cba xbxaacxx xcbax bac а следующие строки - не должны пройти: aab bcb xxaxaaxbxx xaxbx Совсем завис... Я думал, тут будет что-то вроде /(a+)&(b+)&(c+)/ однако это не работает. Пересматривал описание регулярок и... вообще не вижу такого понятия, как "И" в регулярках. "ИЛИ" - вижу, "И" - нет :-(
Имхо, самое оптимальное - это несколько функций проверки. Если задача описана как она есть - то вообще без регулярок, а поиском подстроки. Еще можно регуляркой выкусить все "не искомые" символы, убить повторы и посмотреть длину. Или отсортировать символы строки и регуляркой уже искать известную последовательность.
По поводу нескольких функций проверки - именно так у меня и было изначально, что-то вроде if(preg_match($preg1, $str) and preg_match($preg2, $str) and preg_match($preg3, $str)) но начальник попросил написать одной регуляркой (это скорее уже связано с несостыковками с документацией по проекту, а не с реальными какими-то плюсами или минусами) Задача, да, несколько упрощена, под a, b и c я понимал определённые символьные классы. Но в принципе всё решилось, наверно криво, но удалось сделать одной регуляркой igordata, да вроде всё и так на русском написано А вообще, нужно проверить, чтобы в строке присутствовал хотя бы один символ из одного символьного класса, хотя бы один из другого и хотя бы один из третьего. Последовательность символов может быть любой.
Пароль должен содержать хотя бы одну маленькую букву (русскую или английскую), хотя бы одну большую букву (русскую или английскую) и хотя бы одну цифру. Длина пароля не менее 8 символов. При этом он не автоматом генерится, а пользователь сам его придумывает. Это ещё упростили заказчики, изначально хуже было (пароль должен был отвечать трём из 4х требований - маленькие буквы, большие буквы, цифры, символы). Если несколькими регулярками - делается легко, никаких проблем. А одной регуляркой... криво и длинно
sobachnik да вроде всё и так на русском написано "вот эти должны пройти а вот эти не должны" =) это не то чтобы совсем не сформулировал, но не на русском точно sobachnik Пароль должен содержать хотя бы одну ляляля пупупу мне кажется что не правильно делать это одной регуляркой. надо проверить всеми "правилами" отдельно
Круть какая! Спасибо! И одной регуляркой, и не длинно и, наверно, не криво! Теперь осталось снова перечитать мануал и понять, как это работает )))