Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Странности с regexp / 11 сообщений из 11, страница 1 из 1
27.06.2019, 14:48
    #39831181
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности с regexp
Есть такое выражение в JS-скрипте:
Код: javascript
1.
/^(1\d{6})|(\d{6})$/.test(code)


В переменной code должно быть либо 6-значное число, либо 7-значное число, начинающееся с 1.
Однако это выражение выдает true для кода 123456789.
Если смотреть разбор выражения (например на regex101.com), то получается, что оно неверно разбивается по альтернативам:
1-ый вариант: ^(1\d{6})
2-ой вариант: (\d{6})$

А как бы указать, что ^ и $ не должны включаться в альтернативы?
...
Рейтинг: 0 / 0
27.06.2019, 15:00
    #39831194
monstrU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности с regexp
Alibek B.,

такое не лучше ^(1?)\d{6}$ ?
...
Рейтинг: 0 / 0
27.06.2019, 17:52
    #39831318
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности с regexp
Нет, фактические шаблоны сложнее и в один из не объединить.
Внутренние скобки убрал, теперь нормально.
...
Рейтинг: 0 / 0
28.06.2019, 07:38
    #39831449
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности с regexp
Alibek B.А как бы указать, что ^ и $ не должны включаться в альтернативы?
"Последнюю" часть можно исключить, используя
Код: javascript
1.
(?=...)



"Первую" же часть из выборки не исключить.
...
Рейтинг: 0 / 0
28.06.2019, 09:48
    #39831476
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности с regexp
Как-то это избыточно.
Я просто указал: /^(1\d{6}|\d{6})$/
Ну либо можно было снаружи скобками еще раз обернуть, но это тоже избыточно.
...
Рейтинг: 0 / 0
28.06.2019, 10:18
    #39831487
OldMaster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности с regexp
Alibek B.,
monstrU предложил вам более рациональный шаблон.
В идеале же можно написать так
Код: javascript
1.
^1?\d{6}$


Все остальное будет избыточным.
...
Рейтинг: 0 / 0
28.06.2019, 12:06
    #39831567
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности с regexp
Реальный список допустимых шаблонов (в дальнейшем может расширяться):
^1\d\d-?\d\d\d\d$
^\d\d\d-?\d\d\d$
^\d9\d-\d\d\d$

По-моему их лучше просто перечислить, чем составлять сложное составное выражение, а потом через месяц пытаться вспомнить, что оно означает.
...
Рейтинг: 0 / 0
28.06.2019, 15:53
    #39831708
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности с regexp
Alibek B.Как-то это избыточно.
Зато может исключить из результата выборки не нужную "последнюю" часть выражения.
...
Рейтинг: 0 / 0
12.07.2019, 17:46
    #39836974
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности с regexp
krvsa,
Код: php
1.
/^(1\d{6})|(\d{6})$/


Потому что ты написал, ( начинается с 1 и содержит далее 6 цифр ) ИЛИ ( заканчивается на 6 цифр )
21916782
...
Рейтинг: 0 / 0
15.07.2019, 07:51
    #39837304
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности с regexp
Руслан ДамировичИЛИ ( заканчивается на 6 цифр )
Это не про твое выражение.

Твое выражение нужно читать так
( начинается с 1 и далее 6 цифр ) ИЛИ ( состоит из 6 цифр )
...
Рейтинг: 0 / 0
15.07.2019, 07:55
    #39837305
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности с regexp
Руслан Дамировичзаканчивается
Т.е. что-то началось и оно не пустое... А потом следует некое продолжении, чем оно заканчивается.
Схематично можно представить так:
Код: javascript
1.
<нечто>[заканчивается]
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Странности с regexp / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]