我需要一个正则表达式,用于匹配六位数字及可选的两位小数。 允许的值:
.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.
我需要一个正则表达式,用于匹配六位数字及可选的两位小数。 允许的值:
.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.
正则表达式应该是:^\d{0,6}(\.\d{0,2})?$
(它通过了您的所有示例)
更新:
为了避免空字符串和单个点,正则表达式为^(?!\.?$)\d{0,6}(\.\d{0,2})?$
。该表达式添加了一个负向先行断言?!\.?$
,排除了0或1个点。
我在Fiddle上添加了一个单元测试。
.
。它也会匹配 123456.78
- 是否应该? - MikeM让我们将其分解为四个正则表达式。这四个中至少有一个必须匹配。
# 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}\.?
然后可以使用交替运算符 (|
)将其组合成单个正则表达式:
(\.\d{1,2}|\d{1,4}\.?\d{0,2}|\d{5}\.?\d?|\d{6}\.?)
然后在正则表达式中添加插入符号 (^
) 和美元符号 ($
) 来匹配字符串的开头和结尾。(了解更多关于锚点的信息)
^(\.\d{1,2}|\d{1,4}\.?\d{0,2}|\d{5}\.?\d?|\d{6}\.?)$
这个正则表达式符合您所有的示例,不接受超过6位数字或2位小数。
^\d{0,5}(\d\.\d?|\.\d)?\d?$
123456.78
- 应该吗? - MikeMJava快速示例,用于验证最大长度为10的字符串,即最多3位小数的9个数字。注意:为什么是9个数字而不是10个数字?因为小数点也算作一个字符。
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;
}
}
123456.78
吗? - MikeM