Je voudrais utiliser Regex pour déterminer si les caractères après le premier sont tous des nombres.
Par exemple:
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.
5 Réponses :
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*$
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 ...
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
@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 !!
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*$
^ [a-zA-Z] [0-9] {3} $
^ - "commençant par" (Ici, il commence par n'importe quelle lettre). Lisez-le comme ^[a-zA-Z . [a-z] - toutes les minuscules et A-Z toutes les majuscules (vous pouvez changer si nécessaire.) [0-9] - n'importe quel nombre {3} - décrit le nombre de numéros que vous souhaitez vérifier. Vous devez le lire sous la forme [0-9ITED{3} $ - 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 a>
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
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