Как на регулярном запретить некоторые коды
Пришло ФЛК от ФТС, где код таможенного органа проверяется так:
- соответствует коду российского таможенного органа (первые два символа = "10"); - не может принимать значения, равные "10ХХХ000", 10131ХХХ, 10228ХХХ, 10323ХХХ, 10418ХХХ, 10511ХХХ, 1062ХХХХ, 1072ХХХХ, 10805ХХХ, 10000010, 10006060, 10210220, 10309190, 10317120, 10005030, ... Как с помощью регулярных исключить появление 10805ХХХ либо 10005030 ? |
/10\d{3}000 | 10131\d{3} | 1062\d{4} | и т.д./ для значений с возможными любыми, а для 10000010, 10006060 и т.п., и если их много описать массивом.
|
т.е. мы не ИСКЛЮЧАЕМ а ПРОВЕРЯЕМ ВХОЖДЕНИЕ в некий список
На самом деле сам код таможенного органа проверяется по ^[0-9]{2}|[0-9]{5}|[0-9]{8}$ Нельзя ли проверку корректности совместить с исключениями в одном выражении? |
Цитата:
[0-9] это и есть \d. [0-9]{2}|[0-9]{5}|[0-9]{8} - означает либо две цифры, либо пять, либо восемь, и зачем такая проверка я не знаю. |
маска говорит об уровне таможенного органа, приходит к нам для использования "как есть"
Предложенное решение заставляет переписывать программу для включения некоей "второй" проверки. Этого бы очень не хотелось Если бы "Правильно/Неправильно" можно было совместить в одном выражении, пусть даже очень длинном, все свелось бы к единственному изменению в управляющей таблице. |
Цитата:
Вы спросили как проверить/исключить, я написал, например: let dep = ['10\\d{3}00', '10333\\d{2}', 1089422], //номера нежелательные n = '1023244 1057600 1023200 1032344 1033355 1089422 1011122'; //проверяемые номера let re = new RegExp(dep.join('|'), 'g'); //готовим краштест console.log(n.replace(re, '')) //удаляем нежелательное А можно просто найти и затем по результату что-то выполнить. |
Про массив я понял, это интересно, хоть и переписка программы
Спасибо! |
Вы не ответили что за белиберда такая ^[0-9]{2}|[0-9]{5}|[0-9]{8}$. Еще можно понять, что некий номер нужно анализировать как группы, для этого получаем две первых цифры и последующие за ними, которых может быть от 5 до 8. Тогда выражение будет
^(\d{2})(\d{5,8})$ а то что у вас, это фиг знает что, ибо оно никак не соответствует номерам представленным. |
Да, эту белиберду можно записать и по-другому
но (\d{5,8}) как я понимаю, от 5 до 8, что в корне неправильно А белиберда говорит о том, что это центральные, региональные подразделения либо непосредственно таможенные посты |
Цитата:
/^\d{2}|\d{5}|\d{8}$/ А затем сгруппировать так, что бы можно было дописывать дополнительные проверки... /^(?:\d{2}|\d{5}|\d{8})$/ Такое регулярное выражение находит любые двух-, пяти- и восьмизначные целые положительные числа. Цитата:
/^(?:\d{2}|\d{5}|(?!10805\d{3}|10005030)\d{8})$/ Цитата:
|
А вот это то самое, что и хотелось!
Большое спасибо! Тему закрываем |
Часовой пояс GMT +3, время: 15:45. |