2 votes

Modèles Regex en Java et en Javascript

J'ai un modèle Regex java pour le code postal britannique :

^([a-zA-Z]){1}([0-9][0-9]|[0-9]|[a-zA-Z][0-9][a-zA-Z]|[a-zA-Z][0-9][0-9]|[a-zA-Z][0-9]){1}([ ])([0-9][a-zA-z][a-zA-z]){1}$

Je veux l'utiliser également en Javascript mais il ne valide pas correctement les codes postaux en Javascript. Y a-t-il une différence entre les motifs Regex en Java et en Javascript ?

1voto

collapsar Points 4968

Il existe une différence entre les saveurs de regex Java et JavaScript : JS ne supporte pas le lookbehind.

Un tableau des différences entre les saveurs de regex peut être trouvé sur Wikipedia .

Cependant, cela ne s'applique pas à votre cas. Je suppose que votre chaîne de test JS contient des caractères parasites, par exemple cr/lf.

Essayez d'utiliser la regex sans les ancres et vérifiez les longueurs des chaînes de test.

0voto

forgivenson Points 3744

Votre regex fonctionne aussi bien en JavaScript qu'en Java. Voici un petit exemple utilisant des données que j'ai inventées.

var regex = /^([a-zA-Z]){1}([0-9][0-9]|[0-9]|[a-zA-Z][0-9][a-zA-Z]|[a-zA-Z][0-9][0-9]|[a-zA-Z][0-9]){1}([ ])([0-9][a-zA-z][a-zA-z]){1}$/;

var testData = [

  // valid
  'A11 1AA',
  'a1 1aa',
  'Aa1a 1AA',
  'aA11 1aa',
  'Aa1 1AA',

  // invalid
  'aa1aa 1aa',
  '@a11 1aa',
  'a1aa 1aa'
];

for (var i = 0; i < testData.length; i++) {
  if (testData[i].match(regex)) {
    console.log(testData[i] + ' is valid.');
  } else {
    console.log(testData[i] + ' is invalid.');
  }
}

Des conseils bonus :

Vous pourriez simplifier un peu votre regex. Le site {1} est inutile, et vous n'avez pas besoin d'envelopper l'espace dans [] .

 ^[a-zA-Z]([0-9][0-9]|[0-9]|[a-zA-Z][0-9][a-zA-Z]|[a-zA-Z][0-9][0-9]|[a-zA-Z][0-9]) [0-9][a-zA-z][a-zA-z]$

Bien sûr, vous pouvez laisser dans n'importe quel () que vous voulez pour les groupes de capture, mais je ne sais pas si vous les utilisez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X