0
votes

Modèle de regex pour correspondre aux numéros de version valides

Je recherche un modèle de regex qui correspondrait à un numéro de version.

Les solutions que j'ai trouvées ici ne correspondent pas vraiment à ce dont j'ai besoin. p>

J'ai besoin du motif pour être valide pour Les nombres simples et aussi pour les nombres suivis de. p>

Les numéros valides sont P>

01
1.02.3
.1.2
1.2.
-1


1 commentaires

Veuillez noter les mises à jour de ma réponse - il y a un certain nombre de GOTCHAS avec des formats de version à analyses que vous voudrez peut-être faire attention.


3 Réponses :


0
votes

Cette regex devrait aider:

^ (([[1-9] + \ d * \.) + [1-9] + \ d *) | [1-9] + \ d * $

ci-dessous est l'explication.

[1-9] + \ d * signifie une séquence qui commence par un nombre non nulle, suivi de zéro ou plusieurs numéros

la première partie (([1-9] + \ d * \.) + [1-9] + \ d *) attrape tous vos exemples corrects, à l'exception de 1 . Nous avons donc un | (ou), suivi d'un [1-9] + \ d * séquence.


3 commentaires

Mais si je testais contre 01, il capture le 1 afin qu'il devienne valide .. même pour 1.2., Il capture le 1.2


Essayez d'utiliser le modificateur "A" ("ancrated"). Voir l'exemple ici: Regex101.com/r/kk0eqt/1


Merci beaucoup pour ça. Enfin, je veux savoir si nous pouvons généraliser la règle de 0Number n'est pas valide. Exemple: 1.2.3.04



4
votes

considérer:

^ [1-9] \ d * (\. [1-9] \ d *) * $

briser cela:

  • ^ - Commencez au début de la chaîne.
  • [1-9] - exactement l'un des caractères 1 à 9.
  • \ d * - Plus de chiffres.
  • ( - début de certaines choses supplémentaires facultatives
  • \. - un point littéral.
  • [1-9] - exactement l'un des caractères 1 à 9.
  • \ d * - Plus de chiffres.
  • ) - fin des trucs supplémentaires facultatifs.
  • * - il peut y avoir n'importe quel numéro de ces trucs supplémentaires facultatifs.
  • $ - et finissez à la fin de la chaîne.

    méfiez-vous

    Une partie de cette syntaxe diffère en fonction de ce que vous utilisez le moteur de Regex. Par exemple, utilisez-vous celui de Perl, PHP, JavaScript, C #, MySQL ...?

    Dans mon expérience, les numéros de version ne correspondent pas au format soigné que vous avez décrit.

    Spécifiquement, vous obtenez des valeurs telles que 0.3rc5 , 12.0-beta6 , 2019.04.15-alpha4.5 , 3.1stable , v6.8pl7 et plus.

    Si vous validez les données existantes, assurez-vous que vos critères correspondent aux conditions que vous avez décrites. En particulier, si vous suivez "la version sémantique", sachez que les versions qui sont des zéros sont légales, de sorte que les "étiquettes supplémentaires pour les métadonnées de pré-libération et de construction sont disponibles comme extensions au format Major.Minor.Patch. . ", et que" 1 "n'est pas un numéro de version légale.

    Soyez averti que ce qui précède correspondra également aux numéros de version stupidement longs tels que 1.2.3.4.5.6.7.8.9.10.11.12.13.14 . Pour éviter cela, vous pouvez le limiter, comme vous le souhaitez:

    ^ [1-9] \ d * (\. [1-9] \ d *) {0,3} $

    Ceci modifie le * pour "n'importe quel nombre de points et numéros supplémentaires facultatifs" sur une plage de zéro à trois. Donc cela accepterait 1 , 1.2 , 1.2.3 et 1.2.3.4 , mais pas 1.2.3.4.5 .

    Aussi, si vous voulez que les zéros soient légaux, mais seulement s'il n'y a pas d'autres numéros (donc 0.3 , 1.0.1 ), alors il devient un peu plus complexe :

    ^ (0 | [1-9] \ d *) (\. (0 | [1-9] \ d *)) {0,3} $

    Cette question peut également être une duplication: une regex pour le numéro de version analysant



0
votes

([\ *, \ ^]) ([\ -, \ *, \ w] + [\.]) + (\ w) *

pour le paquet NPM xxx


2 commentaires

S'il vous plaît prendre un moment pour lire via le Aide d'édition dans le centre d'aide . Le formatage sur le débordement de la pile est différent des autres sites.


Cela n'autorise pas une version correcte comme "5.2.0", ce doit être par exemple. "^ 5.2.0" ou "~ 5.2.0"