IBAN正则表达式设计

时间:2017-06-20 14:45:46

标签: regex iban

请帮我设计一下将所有可能的空格与所有IBAN匹配的正则表达式。因为我发现了一个,但它不适用于空格。

[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{4}[0-9]{7}([a-zA-Z0-9]?){0,16}

我至少需要这些格式:

DE89 3704 0044 0532 0130 00
AT61 1904 3002 3457 3201
FR14 2004 1010 0505 0001 3

4 个答案:

答案 0 :(得分:19)

仅举例来自这些国家的IBAN:
从2个字母开始,然后是2个数字 然后在每4个数字之前允许一个空格,可选地以1或2位数字结尾:

120862
454
18
213

regex101 test here

请注意,如果要验证完整字符串,则可以简化正则表达式 由于不再需要负向前瞻\b[A-Z]{2}[0-9]{2}(?:[ ]?[0-9]{4}){4}(?!(?:[ ]?[0-9]){3})(?:[ ]?[0-9]{1,2})?\b 字界(?!...)可以替换为该行的开头\b和结尾^

$

此外,如果有4组4个连接数字并不重要,那么可以简化一个。

^[A-Z]{2}[0-9]{2}(?:[ ]?[0-9]{4}){4}(?:[ ]?[0-9]{1,2})?$

<强>说明

但是,如果你想匹配来自世界各地的IBAN号码? 然后允许IBAN的BBAN部分具有最多30个数字或大写字母。 Reference
并且可以用空格或短划线或两者之间的任何内容写入 例如:^[A-Z]{2}(?:[ ]?[0-9]){18,20}$

因此,将字符串与长IBAN匹配的正则表达式会变得更长一些。

CC12 XXXX 12XX 1234 1234 1234 1234 1234 123

regex101 test here

另请注意,纯正则表达式解决方案无法进行计算 因此,要实际验证IBAN号码,则需要额外的代码。

示例Javascript代码段

&#13;
&#13;
^([A-Z]{2}[ \-]?[0-9]{2})(?=(?:[ \-]?[A-Z0-9]){9,30}$)((?:[ \-]?[A-Z0-9]{3,5}){2,7})([ \-]?[A-Z0-9]{1,3})?$
&#13;
&#13;
&#13;

答案 1 :(得分:6)

以下建议可能适用于您提供的模式:

[A-Z]{2}\d{2} ?\d{4} ?\d{4} ?\d{4} ?\d{4} ?[\d]{0,2}

Try it on regex101

<强>解释

  • [A-Z]{2}\d{2} ? 2个大写字母后跟2位数(可选空格)
  • \d{4} ? 4位数,重复4次(可选空格)
  • [\d]{0,2} 0到2位

答案 2 :(得分:1)

你可以使用这样的正则表达式:

^[A-Z]{2}\d{2} (?:\d{4} ){3}\d{4}(?: \d\d?)?$

<强> Working demo

这将只匹配那些字符串格式

答案 3 :(得分:1)

最好查找正确的IBAN号码的规格。但是如果你想要一个类似于你现有的正则表达式,但有空格,你可以使用以下一个:

^[a-zA-Z]{2}[0-9]{2}\s?[a-zA-Z0-9]{4}\s?[0-9]{4}\s?[0-9]{3}([a-zA-Z0-9]\s?[a-zA-Z0-9]{0,4}\s?[a-zA-Z0-9]{0,4}\s?[a-zA-Z0-9]{0,4}\s?[a-zA-Z0-9]{0,3})?$

以下是一个实例:https://regex101.com/r/ZyIPLD/1