2011-08-10 6 views
1

Quelqu'un peut-il me conseiller sur la façon de créer une règle de validation pour les comptes bancaires néerlandais?néerlandais Règle de validation du compte bancaire

Jusqu'à présent, je ne pouvais trouvé sur Internet:

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

Ceci est mon 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; 
} 

} 

Et voici mon code HTML:

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

Plus tard, lorsque Je rentre dans un compte en banque néerlandais, j'ai une erreur que je ne suis pas censé obtenir. Donc, si vous savez comment résoudre cela, aidez-moi s'il vous plaît.

+0

Je ne vois pas comment vous pouvez valider un compte sans qu'un type de protocole ait lieu entre l'ordinateur client et un serveur bancaire. –

+1

Quel genre de validation voulez-vous dire? Juste numérique (pour autant que je puisse voir 3 fois 2 chiffres et une fois 3 chiffres, tous divisés par un espace), ou voulez-vous vous assurer qu'il s'agit d'un numéro de compte bancaire néerlandais - ergo, satisfaisant le 'elfproef' dans tous les cas sauf les comptes postbank/ing? – KooiInc

Répondre

1

La syntaxe de la regex est incorrecte. Essayez quelque chose comme ceci:

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

qui correspond à des chaînes comme

32 01 28 192 

Deux chiffres suivis d'un espace trois fois, puis trois chiffres. Je ne sais pas si c'est ce que tous les comptes bancaires hollandais ressemblent, bien que cela ressemble à un petit espace de noms pour quelque chose comme ça.

(Il me semble que /(?:\d{2}\s){3}\d{3}/ doit correspondre aux mêmes chaînes et il est un peu plus court.)

modifier — Pour élaborer, l'expression régulière dans le code d'origine a quelques problèmes:

  • Le backslashe avant chacun des caractères "\ s" (espace) est doublé, mais il ne devrait pas l'être. (Cela suppose que les numéros de compte bancaire néerlandais ne ressemble pas à « 92 \ S31 \ 28s \ 120 »)
  • Mettre un raccourci unique de classe de caractères (« \ s ») entre crochets est inutilement redondant
  • suffixation une L'élément regex avec "{1}" est aussi inutile redondant

Le vrai problème était le backslash supplémentaire. En outre, en parlant de redondance inutile, il n'est pas nécessaire d'appeler ".toString()" sur la valeur d'un attribut "value" d'un élément d'entrée, et il n'est pas nécessaire de s'assurer que la valeur n'est pas la chaîne vide. modèle. Dans ce cas, une chaîne vide ne peut pas correspondre au modèle, de sorte que le test n'est pas nécessaire. Enfin (promesse), si vous testez juste une regex contre une chaîne, la méthode « .test() » sur le prototype RegExp est un peu plus efficace:

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

il ne reconnaît pas le numéro de compte néerlandais. –

+0

Je crois que le premier nombre peut être trois chiffres. En dehors de cela, c'est correct. Il y a un total de '10^10' (soit 10 millions) de combinaisons si vous ajoutez un chiffre de plus. – EdoDodo

+0

Saeed Le numéro de compte néerlandais ressemble-t-il réellement au numéro de l'échantillon dans ma réponse?Si @EdoDodo est correct, alors l'expression régulière est incorrecte et le "{2}" après le premier "[0-9]" devrait être "{3}" ... – Pointy

Questions connexes