J'ai eu cette expression de Stackoverflow lui-même - Il prend soin de: P> < Pré> xxx pré> échoue sur / ^ \ d + (\. \ d {0,9})? $ / code>. .23 code>. Peut-il être ajouté à l'expression ci-dessus ou quelque chose qui s'occuperait de tous? P> p>
3 Réponses :
Essayez cette expression: p>
^ \ d * \.? \ d * $ code> p> blockQuote>
Il devrait être ^ \ d * \.? \ D + $ $
Ceci capturera chaque cas que vous avez posté ainsi que .23
limite à 9 décimales p> Aucune limite décimale: p> var isDecimal = string.match( /^(\d+\.?\d*|\.\d+)$/ );
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 CODE>; ~)
@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} code> 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 + code> et qui appartiennent au \ d {0,9 } code>.
Cela correspond également à 23. / ^ (\ d + \.? \ D * | \. \ D +) $ /. Test ('23. ') Code>
Et il correspondra au 23.-1 / ^ (\ d + \.? \ D * | \. \ D +) $ /. Test (2.-1) code>
et qu'en est-il des valeurs négatives
Ceci couvre tous vos exemples, permet aux négatifs et applique la limite décimale à 9 chiffres: Démo en direct: https://regexr.com/4chtk p> pour casser cela: p> depuis les deux côtés du point décimal sont facultatifs, le Une chose que je veux noter est que ce modèle permet (? =. \ 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> 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}$/
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".