什么是RegEx来测试符合要求的FATCA全球中介识别码(GIIN)?

时间:2019-06-26 11:07:16

标签: regex ruby

This is the spec(用于FATCA GIIN)。

4个组中的19位数字(只有字母数字和大写字母),每个数字由一个强制点/句点分隔:

XXXXXX.XXXXX.XX.XXX

前两组是字母数字大写字母,但绝不包含大写字母O。

第三组似乎只允许2个大写字母的严格组合:

LE|SL|ME|BR|SP

第四组只有数字。

到目前为止,我已经掌握了这一点,但是在如何添加“禁止允许O”规则方面仍然存在:

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

那么如何限制前两个组现在允许O?

注意-这是 Ruby

3 个答案:

答案 0 :(得分:1)

您可以使用character class intersection和-匹配整个字符串-锚点:

/\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)-LESLMEBRSP
  • \.-点
  • \d{3}-任何三位数
  • \z-字符串结尾

答案 1 :(得分:1)

当前模式的格式不正确,有未封闭的组。

要省略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}在没有O的情况下按A-Z匹配6次
  • \.匹配.
  • [A-NP-Z0-9]{5}在没有O的情况下匹配5次A-Z0-9
  • \.匹配.
  • (?:LE|SL|ME|BR|SP)匹配任何列表项
  • \.匹配.
  • \d{3}匹配3位数字
  • \b匹配单词边界

Regex demo

您可以在模式周围添加单词边界\b,以防止开头和结尾成为较大单词的一部分。或者,您可以添加\A\z锚以匹配字符串的开头和结尾。

答案 2 :(得分:0)

事实证明,我需要进行负面否定的预测:

(?:(?![O])

基本上说“除了O”(在后面的组中,因此是“向前看”)。

所以最终的解决方案是这样(我认为,虽然不确定,但似乎可行):

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