Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript: RegExp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Юкки
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 5
1

Регулярное выражение для проверки возраста

11.02.2014, 15:26. Просмотров 2512. Ответов 12
Метки нет (Все метки)

Здравствуйте, друзья. Помогите с регулярным выражением. Нужно проверить возраст человека: целое число от 6 до 100 лет. Заранее благодарю!
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2014, 15:26
Ответы с готовыми решениями:

Регулярное выражение для проверки поля
Привет. Нужно регулярное выражение для проверки поля ФИО. Проверка...

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

Регулярное выражение для логина
Задача проверять валидность логина, по условиям логи: строка из латинских букв,...

Регулярное выражение для ника
Подскажите как должно выглядеть регулярное выражение, если условие такое:...

Регулярное выражение для тега input предназначенного для введения телефона.
Помогите написать регулярное выражение для тега input предназначенного для...

12
Vovan-VE
13161 / 6546 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
11.02.2014, 15:56 2
Обязательно целиком огромной сложной регуляркой, которая будет пропускать только целое число от 6 до 100, или можно более естественным путем?
Javascript
1
2
3
4
5
6
7
8
9
var input = prompt('Возраст', '42');
if (null !== input) {
    if (/^\d{1,3}$/.test(input) && +input >= 6 && +input <= 100) {
        // порядок
    }
    else {
        alert('fail');
    };
};
0
Юкки
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 5
11.02.2014, 17:01  [ТС] 3
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Обязательно целиком огромной сложной регуляркой, которая будет пропускать только целое число от 6 до 100, или можно более естественным путем?
Javascript
1
2
3
4
5
6
7
8
9
var input = prompt('Возраст', '42');
if (null !== input) {
    if (/^\d{1,3}$/.test(input) && +input >= 6 && +input <= 100) {
        // порядок
    }
    else {
        alert('fail');
    };
};
Большое спасибо за ответ. Очень элегантный код, но в том-то и дело, что нужно регулярное выражение*))))
0
Vovan-VE
13161 / 6546 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
11.02.2014, 17:22 4
Javascript
1
/^(?:1(?:00?|\d)|[2-5]\d|[6-9]\d?)$/
0
Юкки
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 5
11.02.2014, 17:30  [ТС] 5
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Javascript
1
/^(?:1(?:00?|\d)|[2-5]\d|[6-9]\d?)$/
не получается
0
Vovan-VE
13161 / 6546 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
11.02.2014, 17:40 6
Лучший ответ Сообщение было отмечено Юкки как решение

Решение

Цитата Сообщение от Юкки Посмотреть сообщение
не получается
Что именно не получается? Регулярку проверял — должна работать.
Javascript
1
2
3
4
5
6
7
8
9
var input = prompt('Возраст', '42');
if (null !== input) {
    if (/^(?:1(?:00?|\d)|[2-5]\d|[6-9]\d?)$/.test(input)) {
        // порядок
    }
    else {
        alert('fail');
    };
};
1
Юкки
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 5
11.02.2014, 17:43  [ТС] 7
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Javascript
1
/^(?:1(?:00?|\d)|[2-5]\d|[6-9]\d?)$/
Ой, прошу прощения за невнимательность! Все работает! Спасибо!!!!

Добавлено через 1 минуту
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Что именно не получается? Регулярку проверял — должна работать.
Javascript
1
2
3
4
5
6
7
8
9
var input = prompt('Возраст', '42');
if (null !== input) {
    if (/^(?:1(?:00?|\d)|[2-5]\d|[6-9]\d?)$/.test(input)) {
        // порядок
    }
    else {
        alert('fail');
    };
};
я не в то поле вставила по ошибке, а проверяла это поле. спасибо еще раз!
0
ikki
призрак
2823 / 879 / 118
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
08.03.2014, 21:51 8
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Код JavaScript1
/^(?:1(?:00?|\d)|[2-5]\d|[6-9]\d?)$/
а так не быстрее?
Javascript
1
/^(?:100|[1-9]\d|[6-9])$/
0
Vovan-VE
13161 / 6546 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
09.03.2014, 07:31 9
Цитата Сообщение от ikki Посмотреть сообщение
а так не быстрее?
В сабжевой задаче проверка выполняется единстенный раз. Тут мы разница не заметим даже если специально и очень серьезно всё запутаем и усложним.

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

Лично я из параниодальных соображений привык строить регулярки таким образом, чтобы параллельные ветви полностью исключали друг друга. Уж если какая-то ветвь нас стала удовлетворять с самого своего начала, то все соседние ни коим образом не должны нас удовлетворять даже частично. В данной задаче в моей регулярке мы ветвимся по первой цифре (а если она есть «1», то и по второй).

Ведь если какая-то ветвь нас удовлетворяла с начала, но потом «что-то пошло не так», нам придется возвращаться и пробовать следующие ветки. Чем сложнее регулярка, чем больше ветвей и чем они глубже, чем хуже складываются обстоятельства с точки зрения аналигируемого текста, тем более ощутимее будет разница в производительности: возможно даже на порядки.
1
newJS
2397 / 1070 / 307
Регистрация: 23.06.2011
Сообщений: 3,330
09.03.2014, 21:24 10
Цитата Сообщение от Vovan-VE Посмотреть сообщение
/^(?:1(?:00?|\d)|[2-5]\d|[6-9]\d?)$/
Откоментарить бы всё это великолепие, плиззз. Кто тут от кого произошёл.
Цитата Сообщение от ikki Посмотреть сообщение
/^(?:100|[1-9]\d|[6-9])$/
И чем это хуже? впрочем это может стать понятным из первого ответа, наверно.
0
ikki
призрак
2823 / 879 / 118
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
09.03.2014, 23:38 11
первая регулярка выглядит чуть сложнее для понимания, но, после комментария Vovan-VE и, поразмыслив, я прихожу к однозначному выводу, что она действительно быстрее.
как уже сказал Vovan-VE, в данной задаче (проверка одного числа) это несущественно, но меня интересовала именно скорость обработки регулярки.

к слову - регулярки, тем более такие, здесь вообще как собаке пятая нога.
впрочем, об этом тоже уже сказано в сообщении #2.
1
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16756 / 6647 / 865
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
10.03.2014, 00:04 12
Javascript
1
/^(?:1(?:00?|\d)|[2-5]\d|[6-9]\d?)$/
Тут все просто, если разбить строку на части. Якоря не буду брать, и так понятно, что они значат
Код
(?:1 #единица
  (?:00?|\d)| #в добавок к единице "ноль и, возможно, еще один ноль", либо же любая цифра
  [2-5]\d| #цифра от 2 до 5 и еще одна любая цифра
  [6-9]\d? #цифра от 6 до 9 и, возможно, еще одна цифра
)
Т.е., получится, построчно:
2 строка - либо 10-19, либо 100.
3 строка - 20-59
4 строка - 6-9 либо 60-99.
Несколько мешают восприятию ?: на первый взгляд - но это лишь для исключения ненужного запоминания группировки, если без них, то будет уже выглядеть несколько проще.
Javascript
1
/^(1(00?|\d)|[2-5]\d|[6-9]\d?)$/
А также, возможно, будет чуть понятнее такая запись
Javascript
1
/^(?:1(?:0{1,2}|\d)|[2-5]\d|[6-9]\d?)$/
2
newJS
2397 / 1070 / 307
Регистрация: 23.06.2011
Сообщений: 3,330
10.03.2014, 22:02 13
Спасибо принцип понял.
Известно что проверки идут слева направо, а значит нужно поменять местами первую и вторую ИЛИ, так как 20-59 перекрывает больший диапазон и наиболее "ходовой" возраст, чем 10-19.
0
10.03.2014, 22:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2014, 22:02

Регулярное выражение для Имени и Фамилии
Добрый день! Нужно запилить валидацию формы имени клиента с такими условиями:...

Регулярное выражение для паспорта Украины
Подскажите как сделать регулярное выражение для паспорта Украины который имеет...

Регулярное выражение для имени пользователя
Ребята помогите с регулярным выражением.. Можете написать регулярное выражение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru