J'ai besoin d'une expression régulière pour un nombre à 6 chiffres avec 2 chiffres décimaux en option Valeurs autorisées:
.1 .11 0.11 10. 10.1 10.12 00.00 0.0 00.00
123456 12345 1234 123 12 1 0 0. 123. 123.55 123456.
L'expression régulière devrait être: ^\d{0,6}(\.\d{0,2})?$
(Tous vos échantillons ont été transmis)
Mettre à jour:
Pour éviter les chaînes vides et les points uniques, l'expression rationnelle est ^(?!\.?$)\d{0,6}(\.\d{0,2})?$
. L'expression ajoute un lookahead négatif ?!\.?$
, qui exclut 0 ou 1 point.
J'ai ajouté un test unitaire sur Fiddle .
Divisons-le en quatre expressions rationnelles. Au moins un de ces quatre doit correspondre.
# decimal, 1-2 digits
\.\d{1,2}
# 1-4 digits, optional decimal, 0-2 digits
\d{1,4}\.?\d{0,2}
# 5 digits, optional decimal, optional digit
\d{5}\.?\d?
# 6 digits, optional decimal
\d{6}\.?
Ce qui peut ensuite être combiné en une seule expression rationnelle avec l'opérateur d'alternance (|
):
(\.\d{1,2}|\d{1,4}\.?\d{0,2}|\d{5}\.?\d?|\d{6}\.?)
Ajoutez ensuite un caret (^
) et collez ($
) à faites correspondre le début et la fin de la chaîne .
^(\.\d{1,2}|\d{1,4}\.?\d{0,2}|\d{5}\.?\d?|\d{6}\.?)$
Cela ne s'adapte pas très bien (par exemple, si vous voulez faire correspondre 100 chiffres avec un maximum de 20 après la virgule), mais cela fonctionne et il est relativement facile à comprendre.
Si vous n'avez pas besoin d'utiliser une expression régulière, il existe des moyens plus simples de résoudre ce problème. :)
Ce r.e. correspond à tous vos exemples et n'accepte pas plus de 6 chiffres ou 2 décimales.
^\d{0,5}(\d\.\d?|\.\d)?\d?$
Exemple Java rapide pour valider une chaîne d’une longueur maximale de 10 I.e. 9 chiffres avec un maximum de 3 décimales REMARQUE: pourquoi 9 chiffres au lieu de 10? parce que le point décimal compte aussi comme un caractère
package com.baji.regex;
import Java.util.regex.Matcher;
import Java.util.regex.Pattern;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
/*
* @author: Baji Shaik
* Quick Java example for validating string with max length as 10
* i.e. 9 digits with max 3 decimal
* NOTE: why 9 digits instead of 10 digits? because the decimal point also count as a character
*/
public class CheckNumber {
@Test
public void testSimpleTrue() {
String s= "12345678.1";
assertTrue(Validate10DigitsWithMax3DecimalsNumber(s));
s= "1234567.12";
assertTrue(Validate10DigitsWithMax3DecimalsNumber(s));
s = "123456.123";
assertTrue(Validate10DigitsWithMax3DecimalsNumber(s));
s = "123456789";
assertTrue(Validate10DigitsWithMax3DecimalsNumber(s));
s = "1234567891";
assertTrue(Validate10DigitsWithMax3DecimalsNumber(s));
s = ".123";
assertTrue(Validate10DigitsWithMax3DecimalsNumber(s));
s = "000000.123";
assertTrue(Validate10DigitsWithMax3DecimalsNumber(s));
}
public static boolean Validate10DigitsWithMax3DecimalsNumber(String value){
Pattern pattern = Pattern.compile("^(\\.\\d{1,3}|\\d{1,6}\\.\\d{1,3}|\\d{1,7}\\.\\d{1,2}|\\d{1,8}\\.\\d{1}|\\d{1,10})$");
Matcher matcher = pattern.matcher(value);
if (matcher.find()){
return true;
}
return false;
}
}