Javascript-форум (https://javascript.ru/forum/)
-   Учебные материалы (https://javascript.ru/forum/study/)
-   -   Регулярное выражение (https://javascript.ru/forum/study/66797-regulyarnoe-vyrazhenie.html)

korm 11.01.2017 12:51

Регулярное выражение
 
Здравствуйте.

Пытаюсь практиковаться в написании регулярных выражений, однако результат не очень ясен. Подскажите, пожалуйста, почему так?
console.log(/[0-3]?\d-[0-1]?\d-[0-2]\d{3}/.test("45-12-1991"));

Результат будет true, хотя я указал диапазон первого символа [0-3]
При этом если взять и 12 изменить на 22, то результат будет false, хотя это идентичные условия.
Предполагаю, что это из-за "?", но тогда не ясно, почему во втором числе все нормально проверяется.

ksa 11.01.2017 14:00

Цитата:

Сообщение от korm
Предполагаю, что это из-за "?"

Так и есть. :yes:

Что вообще ты там собрался проверять?

ksa 11.01.2017 14:03

Если это проверка даты - так есть "стандарты". ;)
Цитата:

Дата в формате DD/MM/YYYY:
(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d

https://habrahabr.ru/post/123845/

fuckingquest 11.01.2017 14:03

Цитата:

Сообщение от korm
Результат будет true, хотя я указал диапазон первого символа [0-3]

потому что ? означает есть или нет, регулярка начинает матчить с \d
re = /[0-3]?\d-[0-1]?\d-[0-2]\d{3}/
str = "45-12-1991"

console.log(str.match(re)[0])

//>>>> 5-12-1991

Цитата:

Сообщение от korm
При этом если взять и 12 изменить на 22, то результат будет false, хотя это идентичные условия.

console.log("-12-".match(/-[0-1]?\d-/))
console.log("-22-".match(/-[0-1]?\d-/))

//>>>> [ '-12-', index: 0, input: '-12-' ]
//>>>> null

как то так, вроде

korm 11.01.2017 14:24

Благодарю за разъяснения :thanks:


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