我需要一个可以验证的正则表达式Decimal (18,3)
,这意味着精度为 18,比例为 3。
它需要通过以下标准:
- 逗号前的最大位数是
15
- 逗号后的最大位数是
3
有效示例:
123456789.123
123456789123456.12
12345.1
123456789123456
无效示例:
1234567891234567
123.1234
1.12345
.1234
我怎样才能做到这一点?
我需要一个可以验证的正则表达式Decimal (18,3)
,这意味着精度为 18,比例为 3。
它需要通过以下标准:
15
3
有效示例:
123456789.123
123456789123456.12
12345.1
123456789123456
无效示例:
1234567891234567
123.1234
1.12345
.1234
我怎样才能做到这一点?
首先,字符.
被称为点,或句点,或句号,或小数点,而逗号是字符:,
.
其次,您可以在字符类的正则表达式中指定一个数字:[0-9]
表示 0 到 9 之间的任何数字。
正则表达式中的点将匹配任何字符,因此您需要通过反斜杠(或将其放入字符类)对其进行转义。
请记住,同一字符类中的元素可以按任何顺序排列,因此如果您想获得具有数字和点的东西并使用[0-9.]
它,它将匹配任何数字或点。
现在,您将需要用于任务的有限量词,它们由大括号以最小值和最大值{m,n}
的形式指定。如果您现在使用... ,则意味着字符类重复 1 到 15 次。m
n
[0-9.]{1,15}
[0-9.]
但是如果你使用[0-9.]{1,15}
,它也会匹配......
or 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);
}
这个正则表达式应该适合你:
/^\d{1,15}(\.\d{1,3})?$/
在 Java 中:
Pattern p = Pattern.compile("^\\d{1,15}(\\.\\d{1,3})?$");
尝试这个
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);
}