1
votes

Faire correspondre les numéros après le premier caractère

Je voudrais utiliser Regex pour déterminer si les caractères après le premier sont tous des nombres.

Par exemple:

  • A123 serait valide car après A il n'y a que des nombres
  • A12B serait invalide car, après le premier caractère, il y a une autre lettre

Je veux essentiellement ignorer le premier caractère

J'ai jusqu'ici ceci:

(?<=A)\w*(?=)

mais cela rend A12B ou A1B2C valide , Je ne veux que des chiffres après A.


3 commentaires

Pouvez-vous publier ce que vous avez essayé? SO n'est pas un service d'écriture de code.


^ [A-Z] \ d + $


@ cl0ud Mise à jour, mb


5 Réponses :


2
votes

Votre tentative est très compliquée, d'autant plus que votre objectif est simple. Réussir aux regex est une question de simplicité.

Le premier caractère peut être n'importe quoi, alors utilisez simplement . . Les suivants sont tous des chiffres, vous voulez donc \ d . Vous allez la mettre en étoile pour spécifier une répétition sans restriction, ou utiliser + si vous en voulez au moins une.

Enfin, vous devez ancrer votre regex au début et au fin, sinon cela correspondrait à des trucs comme A123XXXXX ou XXXXA123 . Notez que la plupart des implémentations de match ancreront déjà le modèle à la fin, vous pouvez donc omettre le signe d'insertion au début.

Regex finale:

^.\d*$


2 commentaires

la question porte sur toute la séquence, "le premier caractère". Votre regex correspond également sur (une partie de) A342B345C123. dans ce cas C123, 123, 23 et 3.


@ Chrᴉz Les fonctions de correspondance les plus sensées ancrent le motif au début, mais si vous voulez ...



2
votes

Vous ne pouviez pas faire correspondre un chiffre \ D , suivi d'une correspondance plus de 1 fois un chiffre. Si c'est la chaîne entière, vous pouvez utiliser des ancres affirmant le début ^ et la $ fin de la chaîne.

^\D\d+$

Cela va match:

  • ^ Début de la chaîne
  • \ D Ne correspond pas à un chiffre
  • \ d + Faites correspondre 1+ chiffres en vous assurant qu'il y a des chiffres
  • $ Fin de la chaîne

Démo Regex


6 commentaires

@Jan Vous avez peut-être raison, je lisais le lookbehind positif (? <= A) et j'ai pensé que cela ne devrait pas être un chiffre.


Je suis d'accord, cela peut aller de plusieurs manières caractères après le premier sont tous les nombres vs ne veulent que des nombres après A vs faire correspondre les nombres après le premier caractère


trouvé un problème - _445 par exemple, ne fonctionnera pas pour le caractère spécial @ première lettre je suppose.


Je veux dire, la question (ce post) a demandé la première sous forme de lettre. Ce qui ne fonctionnera pas. Désolé pour la confusion.


@smilyface Je pense que la lecture de la question n'a pas été très claire. Voir le deuxième commentaire ci-dessus.


Hmm. Vous devez avoir raison. L'exigence réelle serait parfois différente. Le questionnaire pourrait manquer ce genre de choses en demandant. Quoi qu'il en soit, votre réponse ou ma réponse aidera sûrement les autres !!



2
votes

La meilleure solution à laquelle je puisse penser est:

let regex = /^.\d*$/;

let testStrings = ['A123', 'A12B'];

testStrings.forEach(str => {
  console.log(`${str} is ${regex.test(str) ? 'valid' : 'invalid'}`);
});
  • ^ - Début de la ligne
  • . - Tout caractère (sauf les terminateurs de ligne)
  • \ d *
    • \ d - un nombre
    • * - répété un nombre illimité de fois (y compris 0 fois. Si vous voulez qu'il soit au moins 1, remplacez-le par + ).
  • $ - Fin de la ligne

^.\d*$


0 commentaires

0
votes

^ [a-zA-Z] [0-9] {3} $

  1. ^ - "commençant par" (Ici, il commence par n'importe quelle lettre). Lisez-le comme ^[a-zA-Z .
  2. [a-z] - toutes les minuscules et A-Z toutes les majuscules (vous pouvez changer si nécessaire.)
  3. [0-9] - n'importe quel nombre
  4. {3} - décrit le nombre de numéros que vous souhaitez vérifier. Vous devez le lire sous la forme [0-9ITED{3}
  5. $ - Fin de la déclaration. (Cela signifie que dans ce cas, il se terminera par 3 chiffres)

Ici, vous pouvez jouer - https://regex101.com/r/mqUHvP/5


0 commentaires

0
votes

Peut-être

(?<=.{1,1})([0-9]+)(?=\s)

(?

([0-9] +) - au moins un chiffre

(? = \ s) - a un espace après

Ajouter ^ au début - pour spécifier le début de la ligne

Remplacez (? = \ s) par $ pour la fin de la ligne


0 commentaires