2011-02-23 5 views
1

Comment écrire une expression régulière en javascript qui doit suivre les conditionsExpression régulière

  1. Tous les segments à l'adresse DN doit suivre la séquence cn=<name>,ou=<name>,o=<bic8>,o=swift
  2. Tous les segments doivent être séparés par ,.
  3. L'adresse du NA doit avoir un maximum de 100 caractères.
  4. Aucun espace n'est autorisé.
  5. Un minimum de 2 et un maximum de 10 segments sont autorisés dans une adresse DN. La pièce <name> doit contenir au moins 2 caractères et au maximum 20 caractères alphanumériques. Les caractères doivent être en minuscules. Un seul caractère spécial peut être utilisé, c'est-à-dire - (Hypen).
  6. L'adresse DN aura 2 numéros maximum. La pièce <name> peut contenir un maximum de 2 chiffres.

Merci à l'avance

+0

Vous devriez envisager d'analyser vous-même au lieu d'invoquer une regex. – jAndy

+0

Pouvez-vous reformuler la question pour indiquer le problème que vous rencontrez en essayant d'écrire une expression régulière qui le fait? – maerics

+0

comment valider le texte séparé par des virgules et dans regexp comment valider la longueur minimale et la longueur maximale – Aaaaa

Répondre

0

code non testé suit, ne me blâmez pas si elle explose votre ordinateur:

var parseDn(str) 
    var m = /^cn=(.*?),ou=(.*?),o=(.*?),o=swift$/.exec(str); 
    if (!m) { return null; } // (a) and (b). 
    if (s.length > 100) { return null; } // (c). 
    if (/\s/.exec(s)) { return null; } // (d). 
    var x = {cn:m[1], ou:m[2], o:m[3]}; 
    var isValidName = function(s) { return (/^[a-z-]{2,20}$/).exec(s); } 
    if (!isValidName(x.cn) || !isValidName(x.ou) || !isValidName(x.o)) { 
    return null; // (f). 
    } 
    var countNumbers = function(s) { return s.replace(/\D/g, "").length; } 
    if (countNumbers(x.cn)>2 || countNumbers(x.ou)>2 || countNumbers(x.o)>2) { 
    return null; // (g). 
    } 
    return x; // => {"cn":"name", "ou":"name", "o":"bic8"} 
} 

Notez que (e) et quelques-uns des points concernant « segments » sont complètement sans contrôle puisque la description est vague . Mais cela devrait vous aider à démarrer ...

+0

merci beaucoup so – Aaaaa

+0

Hii, Dans X.cn sa prise d'une seule valeur est theer tout autre pour qu'il prenne toutes les valeurs cn si entrer plus d'un – Aaaaa

2

Je pense que .split() est beaucoup plus facile à utiliser dans ce cas.

Commencez par diviser la chaîne entière sur les ,, puis divisez chaque segment distinct du tableau résultant sur les =.

Surtout sur une spécification bien définie, la séparation est plus que suffisante pour la manipuler.