我需要一个可以验证Decimal (18,3)
的正则表达式,意思是精度为18,比例为3.
需要通过以下标准:
15
3
有效示例:
123456789.123
123456789123456.12
12345.1
123456789123456
无效示例:
1234567891234567
123.1234
1.12345
.1234
我怎样才能做到这一点?
答案 0 :(得分:2)
首先,字符.
称为点,句号,句号或小数点,而逗号是字符:,
。
其次,您可以在字符类中指定正则表达式中的数字:[0-9]
表示0到9之间的任何数字。
正则表达式中的一个点将匹配任何字符,因此您需要通过反斜杠(或将其放在字符类中)来逃避它。
请记住,同一个字符类中的元素可以按任意顺序排列,因此如果您想获得具有数字和点的内容并使用[0-9.]
,它将匹配任何数字或点。< / p>
现在,您需要为您的任务提供有限量词,这些量词由{m,n}
形式的大括号指定,其中m
是最小值,n
是最大值。如果您现在使用... [0-9.]{1,15}
,则意味着字符类[0-9.]
重复1次,最多15次。
但如果您使用[0-9.]{1,15}
,它也会匹配......
或1234
(请记住我之前说的顺序并不重要。
所以,应用所有这些,你得到了正则表达式:
[0-9]{1,15}\.[0-9]{1,3}
现在,由于您正在进行验证,因此需要锚点来指定正则表达式应该测试整个字符串(而不是简单地找到匹配项)。
^[0-9]{1,15}\.[0-9]{1,3}$
最后,因为你可以有可选的小数,你必须使用一个组和量词?
,这意味着0或1:
^[0-9]{1,15}(?:\.[0-9]{1,3})?$
在你的代码中,你将创建一个像这样的正则表达式:
string myString = "123456789.123";
var regexp = new Regex(@"^[0-9]{1,15}(?:\.[0-9]{1,3})?$");
var setMatches = regexp.Matches(myString);
foreach (Match match in setMatches)
{
Console.WriteLine(match.Groups[0].Value);
}
如果它通过正则表达式,则输出小数。
或类似的东西:
string myString = "123456789.123";
Match match = Regex.Match(myString, @"^[0-9]{1,15}(?:\.[0-9]{1,3})?$");
if (match.Success)
{
Console.WriteLine(match.Groups[0].Value);
}
答案 1 :(得分:1)
这个正则表达式适合你:
/^\d{1,15}(\.\d{1,3})?$/
在Java中:
Pattern p = Pattern.compile("^\\d{1,15}(\\.\\d{1,3})?$");
答案 2 :(得分:0)
试试这个
String str="Your input";
Pattern pattern = Pattern.compile("^\\d{1,15}($|(\\.\\d{1,3}$))");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.output.Println(matcher.group());
}
在c#中试试这个
MatchCollection mc = Regex.Matches("your text", "^\d{1,15}($|(\.\d{1,3}$))");
foreach (Match m in mc)
{
Console.WriteLine(m);
}