2011-08-10 189 views
1

任何人都可以告诉我如何为荷兰银行账户制定验证规则吗?荷兰银行账户验证规则

到目前为止,我只能发现这个基于Web:

regex = /[0-9]{2}[\\s]{1}[0-9]{2}[\\s]{1}[0-9]{2}[\\s]{1}[0-9]{3}/; 

这是我的JavaScript:

function dutchBankAccount(input) { 
var regex = /[0-9]{2}[\\s]{1}[0-9]{2}[\\s]{1}[0-9]{2}[\\s]{1}[0-9]{3}/; 
if(input.value.toString().match(regex) && !(input.value == "")) { 
    return true; 
} else { 
    input.click(); 
    input.style.border = '2px solid #F20056'; 
    return false; 
} 

} 

这是我的HTML代码:

<li><input type="text" id="anum" placeholder="Account Number" autocomplete="off" onkeypress="return isNumberKey(event)" onBlur="isValidAnum()" onFocus="emptyAnum('anum')"/></li> 

后来当我输入一个荷兰银行帐户,我得到了我不应该得到的错误。所以如果你知道如何解决这个问题,请帮助我。

+0

我看不到您如何验证客户端计算机和银行服务器之间没有某种协议的帐户。 –

+1

你的意思是什么样的验证?只是数字(所以我可以看到3次2位数字和1次3位数字,全部除以空格),还是要确保它是现有的荷兰银行帐号 - ergo,满足“elfproef”所有病例,但邮政银行/帐户? – KooiInc

回答

1

正则表达式语法不正确。尝试更多的东西是这样的:

var regex = /[0-9]{2}\s[0-9]{2}\s[0-9]{2}\s[0-9]{3}/; 

匹配字符串喜欢

32 01 28 192 

两个数字后面加一个空格三次,然后三位数。无论这是所有荷兰银行账户的样子,我都不知道,尽管这看起来像是一个小的名字空间。

(它发生,我认为/(?:\d{2}\s){3}\d{3}/应该匹配相同的字符串,这是一个有点短。)

编辑 —为了阐述,在原来代码中的正则表达式有一些问题:

  • 每个“\ s”(空格)字符前面的反斜杠加倍,但不应该是这样。 (假设荷兰银行账号实际上看起来不像“92 \ s31 \ 28s \ 120”)
  • 将单个字符类快捷方式(“\ s”)放在方括号中是不必要的冗余
  • 后缀a带有“{1}”的正则表达式也是不必要的冗余

真正的问题是额外的反斜杠。另外,对于不必要的冗余,不需要对输入元素“value”属性的值调用“.toString()”,并且如果匹配的值不需要确保该值不是空字符串模式。在这种情况下,空字符串不能匹配模式,因此测试不是必需的。最后(承诺),如果您只是针对字符串测试正则表达式,则RegExp原型上的“.test()”方法效率更高一些:

if (regex.test(input.value)) { // matched 
    // ... 
} 
+0

它不承认荷兰帐号。 –

+0

我相信第一个数字可以是三位数字。除此之外,这是正确的。如果再添加一个数字,总共有10^10个(即1000万个)组合。 – EdoDodo

+0

Saeed荷兰帐号实际上看起来像我答案中的样本号码吗?如果@EdoDodo正确,那么正则表达式不正确,第一个“[0-9]”之后的“{2}”应该是“{3}”... – Pointy