OK Regex est l'une des choses les plus déroutantes pour moi. J'essaie de le faire en Javascript. J'ai un champ de recherche dans lequel l'utilisateur entrera une série de caractères. Les codes sont soit:

999MC111

Ou juste

999MC

Il y a TOUJOURS 2 caractères Alpha. MAIS il peut y avoir 1 à 4 caractères à l'avant et parfois 1 à 4 caractères à la fin.

Si le code se termine avec les caractères Alpha, je lance un certain script ajax. S'il y a des chiffres + 2 lettres + chiffres .... il exécute un script ajax différent.

Mon problème est que je sais \ d est à 2 chiffres .... mais il ne peut pas toujours être à 2 chiffres.

Alors, quel serait mon code regex pour diviser cela en un tableau. ou quelque chose.

Je pense que l'expression rationnelle correcte serait (/ ^ ([0-9] +) ([a-zA-z] +) ([0-9] +) $ /

Mais comment puis-je m'assurer que ses SEULEMENT 2 caractères alpha au milieu?

Merci

0
swg1cor14 13 déc. 2011 à 02:29

4 réponses

Meilleure réponse

D'accord, je ne me souciais pas vraiment des 2 caractères du milieu ... tout ce qui comptait vraiment était le premier ensemble de chiffres et le dernier ensemble de chiffres (le cas échéant).

Donc, essentiellement, j'avais juste besoin de gérer les chiffres. J'ai donc fait ceci:

var lead = '123mc444'; //For example purposes
var regex = /(\d+)/g;
var result = (lead.match(regex));

var memID = result[0]; //First set of numbers is member id
if(result[1] != undefined) {
    var leadID = result[1];
}
0
swg1cor14 12 déc. 2011 à 23:07

Vous pouvez utiliser l'expression régulière /\d$/ pour déterminer si elle se termine par une décimale.

\d correspond à un caractère décimal et $ correspond à la fin de la chaîne. Les caractères / entourent l'expression.

Essayez de l'exécuter dans votre console javascript, ligne par ligne.

var values = ['999MC111', '999MC', '999XYZ111']; // some test values

// does it end in digits?

!!values[0].match(/\d$/); // evaluates to true
!!values[1].match(/\d$/); // evaluates to false
1
Dagg Nabbit 12 déc. 2011 à 23:07

L'expression régulière /^\d{1,4}[a-zA-Z]{2}\d{0,4}$/ correspond à une série de 1 à 4 chiffres, suivie d'une série de 2 caractères alpha, suivie d'une autre série de 0 à 4 chiffres.

Cette expression régulière: /^\d{1,4}[a-zA-Z]{2}$/ correspond à une série de 1 à 4 chiffres, suivie uniquement de 2 caractères alpha.

0
Aaron 12 déc. 2011 à 22:42

Pour spécifier le nombre exact de jetons, vous devez utiliser des crochets {}, donc si vous savez qu'il y a 2 jetons alphabétiques que vous mettez {2}, si vous savez qu'il peut y avoir 0-4 chiffres que vous mettez {0,4}

^([0-9]{0,4})([a-zA-z]{2})([0-9]{0,4})$

Le RegEx ci-dessus s'évalue comme suit:

  • 999MC ---> TRUE
  • 999MC111 -> VRAI
  • 999MAC111 ---> FAUX
  • MC ---> VRAI

La division de l'expression en groupes de capture se fait en regroupant les sous-expressions entre parenthèses

Comme vous pouvez le voir sur le lien suivant:

http://regexr.com?2vfhv

Vous obtenez ceci:

3 groupes de capture:
groupe 1: ([0-9]{0,4})
groupe 2: ([a-zA-z]{2})
groupe 3: ([0-9]{0,4})

1
Francisco Alvarado 13 déc. 2011 à 22:48