#556 closed дефект (готово)
РЭ: ошибки в примерах регулярных выражений (часть 2)
Reported by: | alx | Owned by: | Vladimir |
---|---|---|---|
Priority: | major | Component: | Руководство по эксплуатации |
Keywords: | Cc: |
Description
В РЭ аппаратуры MC04-DSL-3U редакции 40 в таблице 7.2 на странице 196 приведены примеры регулярных выражений с пояснениями к ним. В некоторых примерах есть неточности и ошибки.
^[2,3,5]\d{2}
Во-первых, здесь символ "запятая" (',') в символьном классе зачем-то указан дважды. Это излишество, любой символ достаточно указать в перечислении один раз. Предлагаю удалить второй символ ',' из примера. Во-вторых, в описании примера говорится: "номер начинается с одной из цифр 2, 3 или 5, затем две любые цифры", но здесь забыт символ "запятая". Предлагаю скорректировать текст описания так: "номер начинается с одной из цифр 2, 3 или 5 или с символа "запятая"...", далее по тексту.
^+?7\d{10}
В описании сказано: "в начале номера необязательный символ +, затем цифра 7, затем 10 любых цифр +73422241205 или 73422241205". Так 10 любых цифр, или 3422241205? :) Предполагаю, что здесь пропущено слово "например", и предлагаю его добавить: "...затем 10 любых цифр, например +73422241205...".
^[^6,8]
В описании примера сказано: "номер начинается с любой цифры кроме 6 или 8". Это просто неверно. Данное регулярное выражение совпадает со строками, начинающимися с любого символа кроме "шесть", "запятая" или "восемь", а не только с цифры, как здесь написано. Предлагаю исправить описание.
Change History (18)
comment:1 by , 5 years ago
follow-up: 6 comment:2 by , 5 years ago
В РЭ-41 удалил запятые из всех [] и добавил "например":
[235]\d{2} номер начинается с одной из цифр 2, 3 или 5, затем две любые цифры, например, 374
+?7\d{10} в начале номера необязательный символ +, затем цифра 7,
затем 10 любых цифр, например +73422241205 или 73422241205
[68] номер начинается с любой цифры кроме 6 или 8
Теперь правильно?
comment:3 by , 5 years ago
Последняя строчка такая:
[68] номер начинается с любой цифры кроме 6 или 8
comment:4 by , 5 years ago
Регулярное выражение копируется сюда неправильно:
отсутствуют галочки вверх.
Как копировать регулярные выражения в тикет, чтобы были все знаки?
comment:5 by , 5 years ago
Как копировать регулярные выражения в тикет, чтобы были все знаки?
Используйте "Блок кода", 5-я кнопка в панели кнопок, при добавлении комментария.
^[^68]
comment:6 by , 5 years ago
follow-up: 8 comment:7 by , 5 years ago
^[235]\d{2} номер начинается с одной из цифр 2, 3 или 5, затем две любые цифры, например, 374
^[^68] номер начинается с любой цифры кроме 6 или 8
^+?7\d{10} в начале номера необязательный символ +, затем цифра 7, затем 10 любых цифр, например +73422241205 или 73422241205
Тут нет ошибок?
follow-up: 11 comment:8 by , 5 years ago
Replying to Vladimir:
Тут нет ошибок?
Строго говоря, ошибок нет, но в первом и третьем регулярных выражениях описание неполное: здесь явно не сказано, что после обязательных цифр может быть сколько угодно любых других символов. В описании второго регулярного выражения это вытекает из слова "начинается", которое говорит о том, что после первого символа могут быть и другие, но вот из слова "затем" это с такой очевидностью не следует, к тому же в приведенных примерах после обязательных цифр никаких других символов нет...
comment:9 by , 5 years ago
Тогда по первому РВ будет так:
"... \d{2} ... затем любое количество символов,
указанное в фигурных скобках, например, 374." -
м.б. лучше так:
"... затем количество символов, указанное в фигурных скобках,
..."
По третьему РВ:
"... \d{10} ... затем количество символов, указанных в фигурных скобках,
например, +73422241205 или 73422241205,
Предложите примеры, содержащие не только цифры, но и знаки...
comment:11 by , 5 years ago
Replying to alx:
Replying to Vladimir:
Тут нет ошибок?
Строго говоря, ошибок нет, но в первом и третьем регулярных выражениях описание неполное: здесь явно не сказано, что после обязательных цифр может быть сколько угодно любых других символов. В описании второго регулярного выражения это вытекает из слова "начинается", которое говорит о том, что после первого символа могут быть и другие, но вот из слова "затем" это с такой очевидностью не следует, к тому же в приведенных примерах после обязательных цифр никаких других символов нет...
Если Алексей предлагает записать слово "символ" вместо "цифра",
то хорошо бы показать это в примерах, т.е. в примере надо записать не только цифры ("374", "+73422241205 или 73422241205"), но и хоть 1 знак из рег.выражений...
follow-up: 14 comment:12 by , 5 years ago
Т.к. таблица относится к настройке рег.выражение набора и проверка на совпадение номера с выражением выполняется после каждой цифры, предлагаю переформулировать вот так:
Примеры:
^2\d{6}
- вызов будет немедленно отправлен, как только абонент наберёт цифру 2 и ещё 6 любых цифр, например2123456
;^[235]\d{2}
- вызов будет отправлен, как только будет набрана одна из цифр 2, 3 или 5, и затем две любые цифры, например если абонент наберёт374
;^+?7\d{10}
- вызов будет отправлен, как только будет набран следующий номер: в начале номера необязательный символ+
, затем цифра 7, затем 10 любых цифр, например+73422241205
или73422241205
;^[^68]
- вызов будет отправлен после набора одного любого символа кроме 6 или 8;(^7\d{4})|(^6\d{2})
- вызов будет отправлен, как только будет набраны 5 цифр начинающиеся с 7 или 3 цифры начинающиеся с 6, например71234
,612
;-
/^2(\d{6})/83422\1
- регулярное выражение с заменой - имеет формат /<выражение>/<замена>, где 'выражение' - регулярное выражение, 'замена' - строка, на которую заменяется вызываемый номер в случае его совпадения с регулярным выражением. 'Замена' может содержать подстановки фрагментов регулярного выражения '\1', '\2' и т.д.. В данном примере 'выражение'-^2(\d{6})
, а 'замена' -83422\1
. Если будет набрана цифра 2, а затем ещё 6 любых цифр - произойдёт совпадение с 'выражением', исходный номер будет изменён в соответствии с 'заменой' и вызов будет отправлен на набранный номер с префиксом '8342'. Т.е. если в окончании FxS задать такое выражение в качестве "Рег. выражение номера", то при наборе абонентом на телефоне номера 2241205 вызов будет отправлен на номер 83422241205;
но и хоть 1 знак
Ну вот, например, символ +
из выражения ^+?7\d{10}
comment:13 by , 5 years ago
Владимир Александрович, обратите внимание я изменил текст предыдущего комментария.
comment:14 by , 5 years ago
Replying to san:
Т.к. таблица относится к настройке рег.выражение набора и проверка на совпадение номера с выражением выполняется после каждой цифры, предлагаю переформулировать вот так:
Строго говоря, это не совсем так. Для канального окончания FXS, к которому подключен простой аналоговый телефон - это так. Цифры номера принимаются последовательно одна за одной, и проверка выполняется после приема каждой цифры. В случае же, например, ISDN PRI, это не так - там в одном сообщении может придти сразу несколько цифр, например сначала 123
, затем 456
- в таком случае проверка регулярного выражения будет выполнена лишь два раза (для строк 123
и 123456
).
И еще соображение уже по собственно РЭ: а что, для каждого параметра, где используется регулярное выражение, будет такая же таблица с примерами, или только один удостоился такой чести? Если только один, то это непоследовательно. А если для каждого - рационально ли это? Приведенные примеры дают читатель информацию не столько о конфигурационном параметре, сколько о собственно регулярных выражениях (кто уже знаком с регулярными выражениями, для того большинство приведенных примеров и так очевидны). Какова цель этой таблицы с примерами? Не будет ли лучше вынести примеры в какую-то общую вводную часть о регулярных выражениях без привязки к конкретным настройкам?
comment:15 by , 5 years ago
Строго говоря, это не совсем так.
Да, согласен, но на мой взгляд, уточнение деталей только запутает пользователя.
для каждого параметра, где используется регулярное выражение, будет такая же таблица с примерами
Для двух наиболее часто используемых настроек Рег.выр набора и вызова(по моей статистике в ходе техподдержки пользователей), есть по большой таблице с примерами, для остальных настроек по небольшому примеру.
Не будет ли лучше вынести примеры в какую-то общую вводную часть
Использование рег. выражений набора отличается от других настроек из-за той особенности, что проверка производится несколько раз, а, например, в роутинге ввод выражения с заменой, осуществляется в две строки, а не в одну, как в других выражениях. Из-за этих различий я решил сопровождать каждую настройку своими примерами, показывающими как работают конкретные выражения для этой настройки.
comment:16 by , 5 years ago
В РЭ-41 внёс изменения:
Табл. 7.2 Регулярные выражения набора/номера
2\d{6} вызов будет немедленно отправлен, как только абонент наберёт цифру 2
и ещё 6 любых цифр, например, 2123456
[235]\d{2} номер начинается с одной из цифр 2, 3 или 5, затем две любые цифры, например, 374
+?7\d{10} в начале номера необязательный символ +, затем цифра 7,
затем 10 любых цифр, например, +73422241205 или 73422241205
[68] номер начинается с любой цифры кроме 6 или 8
(7\d{4})|(6\d{2}) 5 цифр начинающиеся с 7 или 3 цифры, начинающиеся с 6,
например, 71234 или 612
/2(\d{6})/83422\1 регулярное выражение с заменой: номер из 7 цифр, начинающийся с цифры 2, в случае совпадения набранного номера с выражением 2(\d{6}), вызов будет отправлен на номер с префиксом '8342'. Т.е. если в окончании FХS задать такое выражение в качестве
Рег. выражение номера, то при наборе абонентом на телефоне номера 2241205 вызов будет отправлен на номер 83422241205
Если всё правильно, то закрою тикет в Готово.
comment:17 by , 5 years ago
Resolution: | → готово |
---|---|
Status: | new → closed |
В РЭ-41 по рекомендации SAN изменил 2 строки в Табл.7.1:
(?[34]0\d{2}) например, не будут приниматься вызовы номеров '3074', '4081'
[34]0\d{2}$ принимает только вызовы номеров, начинающихся с одного из символов "три" ('3') или "четыре" ('4'), второй символ которых "ноль" ('0'), за которым следует ровно две любые цифры. Например, '3074', '4081'
С запятыми это моя ошибка в синтаксисе, я ошибочно использовал их как разделители, на самом деле их не должно быть внутри квадратных скобок. Владимир Александрович, нужно убрать запятые из [].
Да, слово "например" пропущено.