Что такое RegEx для проверки на соответствие Глобальному идентификационному номеру FATCA (GIIN)? - PullRequest
2 голосов
/ 26 июня 2019

Это спецификация для FATCA GIIN.

19 цифр, буквенно-цифровые и только заглавные буквы, в 4 группах, каждая из которых разделена обязательной точкой / точкой:

XXXXXX.XXXXX.XX.XXX

Первые две группы состоят из буквенно-цифровых прописных букв, но никогда не включают прописные буквы O.

3-я группа допускает только строгое сочетание двух заглавных букв:

LE|SL|ME|BR|SP

4-я группа состоит только из цифр.

У меня пока есть это, но я застрял в том, как добавить правило «никогда не допускать O»:

[A-Z0-9]){6}\.[A-Z0-9]){5}\.(LE|SL|ME|BR|SP)\.\d{3}

Так, как я могу ограничить эти первые 2 группы, чтобы теперь разрешить O?

ПРИМЕЧАНИЕ - это для Ruby

Ответы [ 3 ]

1 голос
/ 26 июня 2019

Неправильный формат текущего шаблона, есть закрытые группы.

Чтобы опустить O, вы можете использовать [A-NP-Z]

Если вам не нужны группыВы можете использовать:

\b[A-NP-Z0-9]{6}\.[A-NP-Z0-9]{5}\.(?:LE|SL|ME|BR|SP)\.\d{3}\b

Пояснение

  • \b Граница слова
  • [A-NP-Z0-9]{6} Совпадение 6 раз AZ без O
  • \. Матч .
  • [A-NP-Z0-9]{5} Матч 5 раз A-Z0-9 без O
  • \. Матч .
  • (?:LE|SL|ME|BR|SP) Соответствует любому из списков
  • \. Соответствует .
  • \d{3} Соответствует 3 цифрам
  • \b Соответствует границе слова

Regex demo

Вы можете добавить границы слов \b вокруг шаблона, чтобы предотвратить начало и конец части большого слова.Или вы можете добавить \A и \z якоря, чтобы соответствовать началу и концу строки.

1 голос
/ 26 июня 2019

Вы можете использовать пересечение классов символов и - для соответствия всей строке - якоря:

/\A[A-Z0-9&&[^O]]{6}\.[A-Z0-9&&[^O]]{5}\.(?:LE|SL|ME|BR|SP)\.\d{3}\z/

Для сопоставления как целого слова используйте только границы слов, \b вместо якорей:

/\b[A-Z0-9&&[^O]]{6}\.[A-Z0-9&&[^O]]{5}\.(?:LE|SL|ME|BR|SP)\.\d{3}\b/

См. Rubular demo .

Детали

  • \A - начало строки
  • [A-Z0-9&&[^O]]{6} - 6 заглавных букв или цифр, но не O
  • \. - точка
  • [A-Z0-9&&[^O]]{5} - 5 заглавных букв или цифр, но не O
  • \. - точка
  • (?:LE|SL|ME|BR|SP) - LE, SL, ME, BR или SP
  • \. - точка
  • \d{3} - любые три цифры
  • \z - конец строки
0 голосов
/ 26 июня 2019

Оказывается, мне нужно что-то, что называется негативным прогнозом:

(?:(?![O])

, который в основном говорит «кроме O» (в следующей группе, следовательно, «заблаговременно»).

Итак, окончательное решение таково (думаю, не уверен, но, похоже, работает):

(?:(?![O])[A-Z0-9]){6}\.(?:(?![O])[A-Z0-9]){5}\.(?:LE|SL|ME|BR|SP)\.\d{3}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...