web-dev-qa-db-fra.com

Regex en JavaScript pour valider les nombres décimaux

Je veux une expression régulière en JavaScript pour valider les nombres décimaux.

Il ne devrait permettre que deux décimales au maximum. Par exemple, il devrait autoriser 10.89 mais pas 10.899

Il ne devrait également permettre qu'un seul point (.). Par exemple, il devrait autoriser 10.89 mais pas 10.8.9.

12

Essayez l'expression suivante: ^\d+\.\d{0,2}$ Si vous souhaitez que les décimales soient facultatives, vous pouvez utiliser: ^\d+(\.\d{1,2})?$

EDIT: Pour tester une correspondance de chaîne en Javascript, utilisez l'extrait suivant:

var regexp = /^\d+\.\d{0,2}$/;

// returns true
regexp.test('10.5')
29
zatatatata
^\d+(\.\d{1,2})?$

permettra:

  1. 244
  2. 10.89
  3. 9.5

rejettera:

  1. 10.895
  2. 10.
  3. 10.8.9
24
noob

Regex

/^\d+(\.\d{1,2})?$/

Démo

var regexp = /^\d+(\.\d{1,2})?$/;

console.log("'10.5' returns " + regexp.test('10.5'));
console.log("'115.25' returns " + regexp.test('115.25'));
console.log("'1535.803' returns " + regexp.test('1535.803'));
console.log("'7' returns " + regexp.test('7'));
console.log("'.74' returns " + regexp.test('.74'));
console.log("'153.14.5' returns " + regexp.test('153.14.5'));
console.log("'415351108140' returns " + regexp.test('415351108140'));
console.log("'415351108140.5' returns " + regexp.test('415351108140.5'));
console.log("'415351108140.55' returns " + regexp.test('415351108140.55'));
console.log("'415351108140.556' returns " + regexp.test('415351108140.556'));


Explication

  1. / /: le début et la fin de l'expression
  2. ^: tout ce qui suit devrait être au début de la chaîne que vous testez
  3. \d+: il devrait y avoir au moins un chiffre
  4. ( )?: cette partie est optionnelle
  5. \.: voici un point
  6. \d{1,2}: il devrait y avoir entre un et deux chiffres ici
  7. $: tout ce qui précède devrait être à la fin de la chaîne que vous testez

Pointe

Vous pouvez utiliser regexr.com ou regex101.com pour tester des expressions régulières directement dans le navigateur!

7
John Slegers

Nombre avec au plus 2 décimales:

/^\d+(?:\.\d{1,2})?$/

Cela devrait bien fonctionner. S'il vous plaît essayer :)

3
Nisha

S'il vous plaît voir mon projet du filtre multi-navigateur de la valeur de l'élément d'entrée de texte sur votre page Web en utilisant le langage JavaScript: Filtre de clé d'entrée . Vous pouvez filtrer la valeur sous forme de nombre entier, de nombre à virgule flottante ou écrire un filtre personnalisé, tel qu'un filtre de numéro de téléphone. Voir un exemple de filtre personnalisé d’entrée d’un nombre à virgule flottante avec pointeur décimal et limitation à 2 chiffres après le pointeur décimal:

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Input Key Filter Test</title>
	<meta name="author" content="Andrej Hristoliubov [email protected]">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	
	<!-- For compatibility of IE browser with audio element in the beep() function.
	https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->
	<meta http-equiv="X-UA-Compatible" content="IE=9"/>
	
	<link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css">		
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>
	
</head>
<body>
	<h1>Float field</h1>
<input id="Float" 
	onchange="javascript: onChangeFloat(this)"
	onblur="inputKeyFilter.isNaN(parseFloat(this.value), this);"
/>
<script>
	function CreateFloatFilterCustom(elementID, onChange, onblur){
		try{
			inputKeyFilter.Create(elementID
				, onChange
				, function(elementInput, value){//customFilter
					if(value.match(/^(-?\d*)((\.(\d{0,2})?)?)$/i) == null){
						inputKeyFilter.TextAdd(isRussian() ?
								"Допустимый формат: -[0...9].[0...9] или -[0...9]e-[0...9]. Например: -12.34 1234"
								: "Acceptable formats: -[0...9].[0...9] or -[0...9]e-[0...9]. Examples: -12.34 1234"
							, elementInput);
						return false;
					}
					return true;
				}
				, onblur
			)
		} catch(e) {
			consoleError("Create float filter failed. " + e);
		}
	}
	
	CreateFloatFilterCustom("Float");
	
	function onChangeFloat(input){
		inputKeyFilter.RemoveMyTooltip();
		var elementNewFloat = document.getElementById("NewFloat");
		var float = parseFloat(input.value);
		if(inputKeyFilter.isNaN(float, input)){
			elementNewFloat.innerHTML = "";
			return;
		}
		elementNewFloat.innerHTML = float;
	}
</script>
 New float: <span id="NewFloat"></span>
</body>
</html>

Voir aussi ma page exemple du filtre de clé d'entrée

2
Andrej

J'ai trouvé que je pourrais utiliser

^\d+(\.\d+)?$

pour plus de deux décimales.

1
Paul J Abernathy

Essayez une expression régulière comme celle-ci:

(?=[^\0])(?=^([0-9]+){0,1}(\.[0-9]{1,2}){0,1}$)

Admis: 1, 10,8, 10,89, . 89, 0,89, 1000.

Non autorisé: 20. , 50.89.9, 12.999, .., Caractère nul Notez que cela fonctionne pour les nombres positifs

1
Harshit Sinha
 function CheckValidAmount() {
        var amounttext = document.getElementById('txtRemittanceNumber').value;
        var amount = parseFloat(amounttext);
        if (!(/^[-+]?\d*\.?\d*$/.test(amounttext))){
            alert('Please enter only numbers into amount textbox.')
            document.getElementById('txtRemittanceNumber').value = "10.00";
        }
    }

C'est la fonction qui prendra un nombre décimal avec un nombre quelconque de décimales et sans décimale.

Merci ... :)

0
Bhanu pratap

par rapport à la réponse donnée par micro ........, elle ne valide rien dans certaines des plates-formes sur lesquelles je travaille .... pour être précis, elle ne fonctionne pas dans Dream Viewer ...

par la présente .. je le réécris encore .. qui fonctionnera sur n’importe quelle plate-forme .. "^ [0-9] + (. [0-9] {1,2})? $ ".. thnkss ..

0
Bhumin Vadalia