英国银行排序代码javascript正则表达式

时间:2012-07-05 09:58:50

标签: javascript regex bank

我正在尝试在javascript中为英国银行排序代码创建正则表达式,以便用户可以在对之间输入6位数字或带有连字符的6位数字。例如“123456”或“12-34-56”。也不是所有的数字都可以是0。 到目前为止,我已经/(?!0{2}(-?0{2}){2})(\d{2}(-\d{2}){2})|(\d{6})/jsFiddle to test.

这是我的第一个正则表达式,所以我不确定我做得对。对6个0位数的测试应该会失败,我认为前瞻中的-?可选连字符会使它与带有连字符的6个0位数相同,但事实并非如此。 如果我做错了,我会感激一些帮助和任何批评!

2 个答案:

答案 0 :(得分:8)

只是回答您的问题,您可以通过以下方式验证用户输入:

/^(?!(?:0{6}|00-00-00))(?:\d{6}|\d\d-\d\d-\d\d)$/.test(inputString)

它将严格匹配XX-XX-XXXXXXXX形式的输入,其中X为数字, 排除 { {1}},00-00-00以及任何其他情况(例如000000XX-XXXX)。

但是,在我看来,正如其他评论中所述,我认为如果强制用户要么总是输入连字符,要么根本不输入连字符,这样做会更好。在处理与金钱有关的任何事情时要特别严格,以后会挽救(未知)麻烦。

答案 1 :(得分:4)

由于任何数字都可以为零,但不是一次全部,因此您应该将它们全部为零的一种情况视为一个特殊情况。

您正在检查两个数字(\d{2}),然后是可选的连字符(-?),然后是另外两个数字(\d{2})和另一个可选的连字符(-? ),在另外两位数之前(\d{2})。

将这些放在一起会产生\d{2}-?\d{2}-?\d{2},但您可以进一步简化:

(\d{2}-?){2}\d{2}

然后使用以下伪代码匹配格式,但不是00000000-00-00

if (string.match("/(\d{2}-?){2}\d{2}/") && !string.match("/(00-?){2}00/"))
     //then it's a valid code, you could also use (0{2}-?){2}0{2} to check zeros

您可能希望添加字符串锚点^(开始)和$(结束)来检查整个字符串。