Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблемы с регулярным выражением (https://javascript.ru/forum/misc/30530-problemy-s-regulyarnym-vyrazheniem.html)

Artsemi 07.08.2012 16:37

Проблемы с регулярным выражением
 
Нужно написать регулярку для проверки пароля.
Учитывать нужно следующее:
1) минимум один символ латинского алфавита маленького регистра;
2) минимум один символ латинского алфавита большого регистра;
3) минимум одна цифра.


написал следующее:
/^[a-z]+[A-Z]+[0-9]+$/

но пропускает только к примеру - "aS1" или "kGFDJNF23844".
"d1F" - уже неправильно.

Получается мне нужно как-то порядок игнорировать... Помогите плиз уже голову сломал. решение походу очень простое, а я зациклился....:blink:

Deff 07.08.2012 17:02

Artsemi, Приведите:
три правильных примера строки и два - неправильных

devote 07.08.2012 17:04

Цитата:

Сообщение от Artsemi
ужно написать регулярку для проверки пароля.

обычно такие вещи не решаются регами, либо нужно длинную лепить учитывая все комбинации:
var re = /[a-z]+[A-Z]+\d+|[A-Z]+[a-z]+\d+|[a-z]+\d+[A-Z]+|[A-Z]+\d+[a-z]+|\d+[a-z]+[A-Z]+|\d+[A-Z]+[a-z]+/;

alert( re.test( "aS1" ) ); // true
alert( re.test( "kGFDJNF23844" ) ); // true
alert( re.test( "d1F" ) ); // true
alert( re.test( "673jhh34je" ) ); // false

Artsemi 07.08.2012 17:09

Цитата:

Сообщение от Deff (Сообщение 195359)
Artsemi, Приведите:
три правильных примера строки и два - неправильных

Правильные:

fH7, uuuuojnoLKFNU2, ffFF55;

Неправильные:

Fh7, u8uJ, FFff55

devote 07.08.2012 17:10

Цитата:

Сообщение от Artsemi
Правильные:

fH7, uuuuojnoLKFNU2, ffFF55;

Неправильные:

Fh7, u8uJ, FFff55

а разве они не совпадают по вашим критериям? во всех вариантах есть маленькие, большие символы и цифры

Artsemi 07.08.2012 17:11

devote,
спасибо за ответ ща попробую. А может проще в три переменные это все? Как правильнее?

Artsemi 07.08.2012 17:12

Цитата:

Сообщение от devote (Сообщение 195364)
а разве они не совпадают по вашим критериям? во всех вариантах есть маленькие, большие символы и цифры

в разном порядке!!! это не подходит! Мне нужно чтобы пропускало пароли типа: "Hj8" - Это к примеру

devote 07.08.2012 17:14

Artsemi,
в моем варианте не прокатит напримпер такой пароль: HGFjkt76^Jhg
то есть символы не пройдут отличные от латинских и цифр

devote 07.08.2012 17:15

Artsemi,
всеравно я вас не понимаю.. чем отличается этот пароль:
ffFF55
от этого:
FFff55

И почему второй является не правильным?

Artsemi 07.08.2012 17:17

Цитата:

Сообщение от devote (Сообщение 195368)
Artsemi,
в моем варианте не прокатит напримпер такой пароль: HGFjkt76^Jhg
то есть символы не пройдут отличные от латинских и цифр

а мне этого не надо. Главное чтобы учитывало хотя бы один символ из каждой группы (маленькие, большие, цифры). И в любом порядке. Вроде работает! СПАСИБО!!!!:dance:

Artsemi 07.08.2012 17:19

Цитата:

Сообщение от devote (Сообщение 195369)
Artsemi,
всеравно я вас не понимаю.. чем отличается этот пароль:
ffFF55
от этого:
FFff55

И почему второй является не правильным?

регистр... /^([a-z]+)([A-Z]+)([0-9]+)$/
сразу маленькие потом большие потом цифры... а мне нужно чтобы не зависило от этого порядка

devote 07.08.2012 17:21

Цитата:

Сообщение от Artsemi
сразу маленькие потом большие потом цифры... а мне нужно чтобы не зависило от этого порядка

ну раз нужно что бы не зависело, значит все же второй вариант тоже является правильным? разве нет?

Artsemi 07.08.2012 17:22

Цитата:

Сообщение от devote (Сообщение 195375)
ну раз нужно что бы не зависело, значит все же второй вариант тоже является правильным? разве нет?

Если вы про этот
/[a-z]+[A-Z]+\d+|[A-Z]+[a-z]+\d+|[a-z]+\d+[A-Z]+|[A-Z]+\d+[a-z]+|\d+[a-z]+[A-Z]+|\d+[A-Z]+[a-z]+/

тогда да. )) я же и говорю спасибо. Большое спасибо.

devote 07.08.2012 17:26

Цитата:

Сообщение от Artsemi
Если вы про этот

оберните это в скобки еще, что бы он от начала и до конца просматривал:
/^([a-z]+[A-Z]+\d+|[A-Z]+[a-z]+\d+|[a-z]+\d+[A-Z]+|[A-Z]+\d+[a-z]+|\d+[a-z]+[A-Z]+|\d+[A-Z]+[a-z]+)$/

devote 07.08.2012 17:30

хотя вариант не прокатит на таком например пароле:
HGf234k2

Artsemi 07.08.2012 17:30

Цитата:

Сообщение от devote (Сообщение 195377)
оберните это в скобки еще, что бы он от начала и до конца просматривал:
/^([a-z]+[A-Z]+\d+|[A-Z]+[a-z]+\d+|[a-z]+\d+[A-Z]+|[A-Z]+\d+[a-z]+|\d+[a-z]+[A-Z]+|\d+[A-Z]+[a-z]+)$/

Так не работает

Ggrgr4FFFF3342r4rr4rFFFFffGGG - вот такое не определяет.

Artsemi 07.08.2012 17:31

Цитата:

Сообщение от devote (Сообщение 195378)
хотя вариант не прокатит на таком например пароле:
HGf234k2

Да. Меня в принципе этот вариант устраивает. :)

devote 07.08.2012 17:32

тогда нужно так примерно делать
var re = /^[a-zA-Z\d]*([a-z]+[A-Z]+\d+|[A-Z]+[a-z]+\d+|[a-z]+\d+[A-Z]+|[A-Z]+\d+[a-z]+|\d+[a-z]+[A-Z]+|\d+[A-Z]+[a-z]+)[a-zA-Z\d]*$/;

alert( re.test( "HGf234k2" ) );

alert( re.test( "Ggrgr4FFFF3342r4rr4rFFFFffGGG" ) );

Artsemi 07.08.2012 17:34

Цитата:

Сообщение от devote (Сообщение 195381)
тогда нужно так примерно делать
var re = /^[a-zA-Z\d]*([a-z]+[A-Z]+\d+|[A-Z]+[a-z]+\d+|[a-z]+\d+[A-Z]+|[A-Z]+\d+[a-z]+|\d+[a-z]+[A-Z]+|\d+[A-Z]+[a-z]+)[a-zA-Z\d]*$/;

alert( re.test( "HGf234k2" ) );

Хм... А можешь пояснить чем этот вариант лучше этого?? -
/[a-z]+[A-Z]+\d+|[A-Z]+[a-z]+\d+|[a-z]+\d+[A-Z]+|[A-Z]+\d+[a-z]+|\d+[a-z]+[A-Z]+|\d+[A-Z]+[a-z]+/

devote 07.08.2012 17:36

Цитата:

Сообщение от Artsemi
Хм... А можешь пояснить чем этот вариант лучше этого?? -

в том что первый вариант скушает и такой пароль:
hgfHGрпацу67№;":%;№?6546754%*?:%ырJHGF6 58ahg
var re = /[a-z]+[A-Z]+\d+|[A-Z]+[a-z]+\d+|[a-z]+\d+[A-Z]+|[A-Z]+\d+[a-z]+|\d+[a-z]+[A-Z]+|\d+[A-Z]+[a-z]+/;
 
alert( re.test( "hgfHGрпацу67№;\":%;№?6546754%*?:%ырJHGF658ahg" ) ); // true

а второй нет:
var re = /^[a-zA-Z\d]*([a-z]+[A-Z]+\d+|[A-Z]+[a-z]+\d+|[a-z]+\d+[A-Z]+|[A-Z]+\d+[a-z]+|\d+[a-z]+[A-Z]+|\d+[A-Z]+[a-z]+)[a-zA-Z\d]*$/;
 
alert( re.test( "hgfHGрпацу67№;\":%;№?6546754%*?:%ырJHGF658ahg" ) );

Artsemi 07.08.2012 17:37

Цитата:

Сообщение от devote (Сообщение 195385)
в том что первый вариант скушает и такой пароль:
hgfHGрпацу67№;":%;№?6546754%*?:%ырJHGF6 58ahg

Нет. Такое кушать не надо. )) Спасибо

Мне нужны только латинские разных регистров и цифры.

Deff 07.08.2012 18:47

Тады простенько, для новичка:
<input id="test" type="text"/> <input type="button" value="Test" onclick="Tst()"/>

<script>
function Tst() {
    var elem = document.getElementById( 'test' );
    var str = elem.value;
    var str2=str.replace(/[a-z]/g,'');
    var str3=str2.replace(/[A-Z]/g,''); 
    var str4=str3.replace(/[0-9]/g,'');

    if(str!=str2&&str2!=str3&&str4==''){alert('Норма');return;}
    alert('Неправильный ввод Пароля')
}
</script>


Часовой пояс GMT +3, время: 07:15.