0
votes

JS Regex pour le prix

Je cherchais une regex pour le prix, mais je n'ai pas trouvé d'exemple complet. J'ai ce code: xxx

mais il doit être amélioré: La partie dollar doit être de 1 à 3 chiffres de long et ne devrait pas commencer par "0" (comme 01.548), Aucun autre caractère ne devrait être autorisé dans le prix total, autrement que les chiffres et «.» Il doit y avoir exactement 3 chiffres après '.' Les valeurs zéro ne doivent pas être autorisées aussi, comme 00.000


13 commentaires

Les décimales devraient-elles être facultatives?


Qu'en est-il de 1.100 ou 1.110 ?


Est 0.534 valide?


1.100, 1.110 et 0.534 sont des prix valides


/ ^ ([1-9] [0-9] * | 0) \. (?! 000) ([0-9] {3}) $ / devrait faire le tour.


Donc 1.000 est valide ou invalide?


Pouvez-vous ajouter l'exemple et la valeur attendue?


Qu'en est-il de 2 ?


Voter à fermer comme "besoin de détails ou de clarté". Il y a beaucoup trop de trous dans votre question qui ont suscité plusieurs questions sans réponse. Pour une référence future, vous devriez être attentif aux commentaires.


@MONKEYZEUS 2 n'est pas valide, comme je l'ai dit en question- "Il doit y avoir exactement 3 chiffres après". " "


Oui, vous avez dit qu'il doit y avoir trois chiffres après une période, mais cela ne signifie pas que les décimales sont nécessaires car j'ai demandé dans mon premier commentaire.


@Monkeyzeus Désolé, je suppose que doit être! = Obligatoire


Eh bien, vous n'avez dit que trois chiffres sont nécessaires après la décimale. Vous n'avez pas indiqué que la décimale elle-même est requise. Une grande partie de votre phrase de votre question est ambiguë. Considérons ces deux déclarations: trois chiffres doivent suivre la décimale si elle existe contre une décimale est toujours requise avec trois chiffres après . 5 réponses différentes (2 supprimées) ont été postées et modifiées à plusieurs reprises en raison des ambiguïtés présents dans votre question. Je suis surpris que cela ne soit pas soigné plus tôt.


3 Réponses :


1
votes

Une option consiste à utiliser la vérification de la lunette négative s'il n'y a pas de zéros ou plus au début suivi d'un chiffre 1-9 ou que l'ensemble de la correspondance ne constitue que des zéros et des points.

const pattern = /^(?!0+[1-9]|[0.]+$)\d{1,3}\.\d{3}$/;
["01.548",
  "12",
  "0.0000",
  "12.000",
  "12.001",
  "1.100",
  "1.110",
  "0.534"
].forEach(s => console.log(s + ": " + pattern.test(s)));


4 commentaires

12.000 devraient correspondre


@Roland je vois, j'ai mis à jour le motif.


sympa, mais 0,000 ne devrait pas correspondre


@Roland OK, la mise à jour ne correspond plus à cela.



0
votes

Qu'en est-il de la solution non-regex? XXX


0 commentaires

1
votes

^ ([1-9] [0-9] {0,2} | 0) \. (?! 000) ([0-9] {3}) | ([1-9] [0-9] {0,2}) \ 00 $ devrait faire le tour.

  • Il commence par 0 ou A nombre 1-3 chiffres qui ne commence pas avec zéro
  • Il se termine par un Numéro de 3 000 3 chiffres

    ou

    • Il commence par un chiffre 1-3 chiffres qui ne commence pas avec zéro
    • Il se termine par 000

1 commentaires

Selon un commentaire sur une autre réponse, "12.000 devraient correspondre"