【发布时间】:2014-06-17 02:20:00
【问题描述】:
我发现一个正则表达式匹配来自所有国家/地区的所有 IBAN 号码here:
[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{4}[0-9]{7}([a-zA-Z0-9]?){0,16}
我尝试调整它,使其具有两个捕获组,一个用于国家代码(前两个字母),一个用于帐号(后 10 位?)
"^(?<CountryCode>[a-zA-Z]{2})[0-9]{2}[a-zA-Z0-9]{4}(?<AccountNumber>[0-9]{7}([a-zA-Z0-9]?){0,16})"
上面的正则表达式无法捕获帐号。我想基本上捕获最后 10 位数字,但由于 BBAN 在所有国家/地区都不同(这就是发明 IBAN 的原因),所以这并不总是相似的。
我希望有人能给我一些想法。
/编辑我把它改成:
"^(?<CountryCode>[a-zA-Z]{2})[0-9]{2}[a-zA-Z0-9]{4}([0]*)(?<AccountNumber>([a-zA-Z0-9]?){0,16})";
这适用于我对荷兰号码的单元测试,但我不确定其他国家/地区。我仍然很想听听你的评论。
【问题讨论】:
-
该正则表达式
([a-zA-Z0-9]?){0,16}中的最后一组捕获 0 到 16 个字符。这就是您想要的命名组AccountNumber中的内容吗? -
捕获 0 之后的所有内容基本上就是这个想法。但我决定暂时只占领荷兰 BBAN,因为那是我们的国家。