10
votes

Regex - Vérifier la décimale (JavaScript)

J'ai eu cette expression de Stackoverflow lui-même - / ^ \ d + (\. \ d {0,9})? $ / .

Il prend soin de: < Pré> xxx

échoue sur .23 . Peut-il être ajouté à l'expression ci-dessus ou quelque chose qui s'occuperait de tous?


2 commentaires

Vous souciez-vous de faux positifs? Sinon un simple \.? Au début, le fera.


Vous avez juste besoin de changer le premier "+" en "*". Plus le signe signifie un (1) ou plus pendant que l'étoile signifie aucun (0) ou plus. Cela ne tient pas non plus en compte le signe plus (+) signe ou moins (-) qui peut être devant des chiffres. Ce serait "[+ -]?" ou ça pourrait être "[\ + \ \ -]?" S'ils ont une signification particulière à l'intérieur des supports. Ensuite, vous avez aussi les substances "e + 10".


3 Réponses :


1
votes

Essayez cette expression:

^ \ d * \.? \ d * $


1 commentaires

Il devrait être ^ \ d * \.? \ D + $ $



31
votes

Ceci capturera chaque cas que vous avez posté ainsi que .23

limite à 9 décimales p> xxx pré>

Aucune limite décimale: p>

var isDecimal = string.match( /^(\d+\.?\d*|\.\d+)$/ );


9 commentaires

Limitez les décimales à neuf, et c'est parfait.


SyntaxError: Expression régulière non valide: /^(\D+\.?\d.0,9 €|\\.\1,9 € €$/: groupe non déterminé


@Kooeilnc: mon mauvais! J'ai foiré l'édition dans la limite décimale de 9. Essayez-vous maintenant


@Ben: oui, mais encore une fois, il ne captira pas 3.141592653589793238462643383279502884197169399375105820974 ; ~)


@KOOIININC - Le modèle de l'OP impose la limite de 9 décimales. Il ne mentionne pas la limite spécifique, mais il a l'air intentionnel.


@Ben - Vous trouverez peut-être que le \ d + \.? \ D {0,9} Le groupe est très intensif de ressources. Si l'entrée commence avec beaucoup de chiffres, il peut y avoir beaucoup de backtracking lorsqu'il décide quels chiffres doivent être consommés par le \ d + et qui appartiennent au \ d {0,9 } .


Cela correspond également à 23. / ^ (\ d + \.? \ D * | \. \ D +) $ /. Test ('23. ')


Et il correspondra au 23.-1 / ^ (\ d + \.? \ D * | \. \ D +) $ /. Test (2.-1)


et qu'en est-il des valeurs négatives



2
votes

Ceci couvre tous vos exemples, permet aux négatifs et applique la limite décimale à 9 chiffres: xxx pré>

Démo en direct: https://regexr.com/4chtk p>

pour casser cela: p> xxx pré>

depuis les deux côtés du point décimal sont facultatifs, le (? =. \ d) code> s'assure qu'au moins l'un d'entre eux est présent. Donc, le nombre peut avoir une partie entière, une partie décimale ou les deux, mais pas non ni. P>

Une chose que je veux noter est que ce modèle permet 23. code>, qui était dans votre exemple. Personnellement, j'appellerais cela un nombre non valide, mais c'est à vous de décider. Si vous changez d'avis sur celui-là, il reçoit beaucoup plus simple ( Démo ): P>

/^[+-]?\d*\.?\d{1,9}$/


0 commentaires