请帮我设计一下将所有可能的空格与所有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
答案 0 :(得分:19)
仅举例来自这些国家的IBAN:
从2个字母开始,然后是2个数字
然后在每4个数字之前允许一个空格,可选地以1或2位数字结尾:
120862
454
18
213
请注意,如果要验证完整字符串,则可以简化正则表达式
由于不再需要负向前瞻\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
另请注意,纯正则表达式解决方案无法进行计算 因此,要实际验证IBAN号码,则需要额外的代码。
示例Javascript代码段
^([A-Z]{2}[ \-]?[0-9]{2})(?=(?:[ \-]?[A-Z0-9]){9,30}$)((?:[ \-]?[A-Z0-9]{3,5}){2,7})([ \-]?[A-Z0-9]{1,3})?$
&#13;
答案 1 :(得分:6)
以下建议可能适用于您提供的模式:
[A-Z]{2}\d{2} ?\d{4} ?\d{4} ?\d{4} ?\d{4} ?[\d]{0,2}
<强>解释强>
[A-Z]{2}\d{2} ?
2个大写字母后跟2位数(可选空格)\d{4} ?
4位数,重复4次(可选空格)[\d]{0,2}
0到2位答案 2 :(得分:1)
答案 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