Помогите с регуляркой

1. Pashka13 (21.07.2012 / 13:21)
Начал осваивать рег. выражения и возник один вопрос. Есть регулярка [3]?[a-zA-Z]{2,4}[34]? нужно проверять строку ещё и на длину, которая должна быть 3 или 4 символа. Пытался делать так [[3]?[a-zA-Z]{2,4}[34]?]{3,4} но такая конструкция не работает. Подскажите решение проблемы, пожалуйста!

2. Владислав (21.07.2012 / 13:32)
[a-zA-Z34]{3,4} так, если расположение цифр важно то оставь прежнюю и на выходе проверяй длинну...
<?php
if(preg_match('/^3?[a-z]{2,4}[34]?$/i',$string,$out) AND strlen($out[0])<=4){
    echo 'Ok';
}else{
    echo 'Not';
}
?>


3. Pashka13 (21.07.2012 / 13:48)
Хотелось бы обойтись одной регуляркой без strlen

4. Петр (21.07.2012 / 16:56)
Единственное, что приходит в голову
^[3a-z][a-z]{2}[34a-z]$


5. Pashka13 (21.07.2012 / 18:32)
К сожалению эта регулярка будет работать не так, как мне надо (

6. Владислав (21.07.2012 / 19:10)
#3, а другого выхода нет...хотя не, есть... в место strlen можно еще !isset($out[0]{4}) заюзать... и на производительности это особо не скажется

7. Pashka13 (21.07.2012 / 19:16)
Меня интересовала не производительность, а возможность решения проблемы при помощи одной только регулярки без использования других функций. Но видно придётся похоронить идею. Всем спасибо за помощь )

8. Петр (21.07.2012 / 19:38)
Извиняюсь, я почему-то не заметил, что и 3 символа можно. Вот так тогда
/^3?+[a-z]{2,4}+[34]?(?<=^.{3}|^.{4})$/i
Рано хоронишь идею :-)

9. Pashka13 (21.07.2012 / 19:52)
Выглядит зловеще, надо попробовать )

10. Владислав (21.07.2012 / 19:56)
#8, не плохо)) я читал давно как то, но чет не вник, ща вроде как понял))

11. Don (21.07.2012 / 19:58)
if (!preg_match('/^[A-z0-9]{3,12}$/i',$login)){
		echo 'Убедитесь что Логин содержит от 3 до 12 символов, и состоит из латинских';
    } else {
        echo 'Все гуд';
} 
- а не легче так сделать?

12. Pashka13 (21.07.2012 / 20:06)
#8, увы, не то
Одной регуляркой точно не обойдёшься. Всё, идея закопана )

13. Pashka13 (22.07.2012 / 16:42)
#8, я ступил, регулярка работает, как надо ) благодарю!

URL: https://visavi.net/topics/33377