2011-08-10 138 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