开发者

help with Regex - need up to 3 number after the dot (.)

I need help with a regex matching a number. I need up to 3 digits after the dot (.):

12345    ok
12       ok
12.1     ok
12.12    ok
12.12开发者_JAVA技巧3   ok
12.1234  Error
1.123456 Error

how to do it? Thanks in advance.


\d+(?:\.\d{1,3})?

Explanation:

\d+        # multiple digits
(?:        # start non-capturing group  
  \.       # a dot
  \d{1,3}  # 1-3 digits
)?         # end non-capturing group, made optional


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


You can try:

^\d+|(\d+\.\d{1,3})$
  • \d - Single digit
  • \d+ - one or more digits, that is a number.
  • \. - dot is a metachar..so to match a literal dot, you'll need to escape it.
  • {1,3} - between 1 to 3 (both inclusive) repetitions of the previous thing.
  • ^ and $ - Anchors so that we match entire thing not just part of something.


Are you sure you need regex to solve the problem you are having? How about:

bool ContainsAtMostThreeNumbersAfterDot(string str)
{
  int dotIndex = str.IndexOf(".");
  float f;
  return float.TryParse(str, out f) && str.Length - dotIndex < 3;
}

This code is nor complete or 100% correct (take is just as an idea and handle the specific cases yourself), but IMHO, it expresses the intent a lot more clearly than using a regex to solve a problem that does not need regex at all.


REGEX

^[\d]*[\.]\d{3}$

Examples:

ok -- 1.000
ok -- 10.000
ok -- 100.000
ok -- 1000.000
ok -- 10000.000

error -- 10
error -- 10.0
error -- 10.00
error -- 10,000

EDITED (2019-09-12)

Only 3 decimal places accepted now. Delimited by Dot.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜