Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.06.2020, 14:17
Интересующийся
Отправить личное сообщение для varjaginm Посмотреть профиль Найти все сообщения от varjaginm
 
Регистрация: 12.10.2018
Сообщений: 22

Как на регулярном запретить некоторые коды
Пришло ФЛК от ФТС, где код таможенного органа проверяется так:
- соответствует коду российского таможенного органа (первые два символа = "10");
- не может принимать значения, равные "10ХХХ000", 10131ХХХ, 10228ХХХ, 10323ХХХ, 10418ХХХ, 10511ХХХ, 1062ХХХХ, 1072ХХХХ, 10805ХХХ, 10000010, 10006060, 10210220, 10309190, 10317120, 10005030, ...

Как с помощью регулярных исключить появление 10805ХХХ либо 10005030 ?
Ответить с цитированием
  #2 (permalink)  
Старый 03.06.2020, 14:37
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

/10\d{3}000 | 10131\d{3} | 1062\d{4} | и т.д./ для значений с возможными любыми, а для 10000010, 10006060 и т.п., и если их много описать массивом.
Ответить с цитированием
  #3 (permalink)  
Старый 03.06.2020, 14:50
Интересующийся
Отправить личное сообщение для varjaginm Посмотреть профиль Найти все сообщения от varjaginm
 
Регистрация: 12.10.2018
Сообщений: 22

т.е. мы не ИСКЛЮЧАЕМ а ПРОВЕРЯЕМ ВХОЖДЕНИЕ в некий список
На самом деле сам код таможенного органа проверяется по
^[0-9]{2}|[0-9]{5}|[0-9]{8}$
Нельзя ли проверку корректности совместить с исключениями в одном выражении?
Ответить с цитированием
  #4 (permalink)  
Старый 03.06.2020, 15:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от varjaginm
т.е. мы не ИСКЛЮЧАЕМ а ПРОВЕРЯЕМ ВХОЖДЕНИЕ в некий список
Наличие чего-то в чем-то можно трактовать как удачей, так и несчастьем. Так и с номерами, если нужно определить является ли некий входной номер нежелательным, то проверяем его вхождение в ранее описанную коллекцию таковых. Если это куча номеров и в них нужно удалить нежелательные, то удаляем те, которые описаны коллекцией.

[0-9] это и есть \d.

[0-9]{2}|[0-9]{5}|[0-9]{8} - означает либо две цифры, либо пять, либо восемь, и зачем такая проверка я не знаю.
Ответить с цитированием
  #5 (permalink)  
Старый 03.06.2020, 15:38
Интересующийся
Отправить личное сообщение для varjaginm Посмотреть профиль Найти все сообщения от varjaginm
 
Регистрация: 12.10.2018
Сообщений: 22

маска говорит об уровне таможенного органа, приходит к нам для использования "как есть"
Предложенное решение заставляет переписывать программу для включения некоей "второй" проверки. Этого бы очень не хотелось
Если бы "Правильно/Неправильно" можно было совместить в одном выражении, пусть даже очень длинном, все свелось бы к единственному изменению в управляющей таблице.
Ответить с цитированием
  #6 (permalink)  
Старый 03.06.2020, 15:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от varjaginm
маска говорит об уровне таможенного органа
Если это проверка N номеров которые определяют чей таможенный орган (соответствует коду российского таможенного органа первые два символа = "10"), то что тогда такое дальше определяется?

Вы спросили как проверить/исключить, я написал, например:

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, '')) //удаляем нежелательное


А можно просто найти и затем по результату что-то выполнить.
Ответить с цитированием
  #7 (permalink)  
Старый 03.06.2020, 15:58
Интересующийся
Отправить личное сообщение для varjaginm Посмотреть профиль Найти все сообщения от varjaginm
 
Регистрация: 12.10.2018
Сообщений: 22

Про массив я понял, это интересно, хоть и переписка программы
Спасибо!
Ответить с цитированием
  #8 (permalink)  
Старый 03.06.2020, 16:03
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Вы не ответили что за белиберда такая ^[0-9]{2}|[0-9]{5}|[0-9]{8}$. Еще можно понять, что некий номер нужно анализировать как группы, для этого получаем две первых цифры и последующие за ними, которых может быть от 5 до 8. Тогда выражение будет

^(\d{2})(\d{5,8})$


а то что у вас, это фиг знает что, ибо оно никак не соответствует номерам представленным.
Ответить с цитированием
  #9 (permalink)  
Старый 03.06.2020, 18:37
Интересующийся
Отправить личное сообщение для varjaginm Посмотреть профиль Найти все сообщения от varjaginm
 
Регистрация: 12.10.2018
Сообщений: 22

Да, эту белиберду можно записать и по-другому
но (\d{5,8}) как я понимаю, от 5 до 8, что в корне неправильно
А белиберда говорит о том, что это центральные, региональные подразделения либо непосредственно таможенные посты
Ответить с цитированием
  #10 (permalink)  
Старый 04.06.2020, 05:12
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от varjaginm
На самом деле сам код таможенного органа проверяется по
^[0-9]{2}|[0-9]{5}|[0-9]{8}$
Который можно записать так...
/^\d{2}|\d{5}|\d{8}$/

А затем сгруппировать так, что бы можно было дописывать дополнительные проверки...
/^(?:\d{2}|\d{5}|\d{8})$/


Такое регулярное выражение находит любые двух-, пяти- и восьмизначные целые положительные числа.

Сообщение от varjaginm
Как с помощью регулярных [выражении] исключить появление 10805ХХХ либо 10005030?
Чтобы исключить среди восьмизначных чисел появление определённых чисел, вам у соответствующей группы следует при помощи (?!) указать не нужные числа.

/^(?:\d{2}|\d{5}|(?!10805\d{3}|10005030)\d{8})$/


Сообщение от varjaginm
Нельзя ли проверку корректности совместить с исключениями в одном выражении?
Как видите, можно!
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как запретить вызов функции? Artur_Hopf Общие вопросы Javascript 4 12.11.2018 09:36
Как во время обработки результата на странице запретить пользователю ее покидать? giwuf Javascript под браузер 2 22.10.2018 17:33
Htaccess, как запретить доступ ко всем кроме нескольких файлов eddin Серверные языки и технологии 8 18.02.2016 19:32
как запретить срабатывание mouseout axmed2004 Events/DOM/Window 1 09.12.2014 22:50
Как запретить уход из фрейма в top-окно? sturm Общие вопросы Javascript 6 20.04.2008 04:20