0

我正在寻找一个正则表达式,它能够验证字符串是否包含从 0 开始的任何数字,并且还允许小数点位于除 .1 或 .45 之外的任何位置。小数点在任何点我的意思是该数字应该能够具有任意数量的精度位。

数字实际上可以是任何东西:

1
2
3.5
3.58278723475
6523424.82347265

我有这个当然失败了,因为我的正则表达式没有考虑小数点:

 foreach (string[] coorPairArray in extents.Select(t => t.Trim().Split(' ')))
 {
     Regex isnumber = new Regex("^[0-9]+$");

     if ((!isnumber.IsMatch(coorPairArray[0]) || (!isnumber.IsMatch(coorPairArray[1]))))
     {
         dataBaseConnection.Close();

         throw new ArgumentException("Error: An extent value contained alphanumeric data. GetExtentsAsGml().");
     }
  }
4

5 回答 5

4

这应该做的工作:

 Regex isnumber = new Regex(@"^[0-9]+(\.[0-9]+)?$");
于 2012-07-30T10:09:32.387 回答
3

你甚至需要一个正则表达式吗?不会这样的工作:

foreach (string[] coorPairArray in extents.Select(t => t.Trim().Split(' '))) 
{
    var lat = Decimal.MinValue;
    var lng = Decimal.MinValue;
    if (!Decimal.TryParse(coorPairArray[0], out lat) || !Decimal.TryParse(coorPairArray[1], out lng))
    {
         dataBaseConnection.Close(); 
         throw new ArgumentException("Error: An extent value contained alphanumeric data. GetExtentsAsGml().");
    }

    // do something with lat/lng
} 
于 2012-07-30T10:09:25.953 回答
1
[1-9][0-9]*(\.[0-9]+)? | 0\.[0-9]+

第一个是正常数字。第二个处理像 0.1 这样的事情

当然根据需要添加 ^ 和 $。

我宁愿选择詹姆斯的回答而不是这个。这只是为了好奇。

于 2012-07-30T10:11:42.833 回答
1

最好像@James回答那样做一个tryparse,如果你想通过正则表达式,那么这里是一个示例:

[Test]
[TestCase("1")]
[TestCase("2")]
[TestCase("3.5")]
[TestCase("3.58278723475")]
[TestCase("6523424.82347265")]
public void FluentCalculator_Test(string testSource)
{
    var match = Regex.Match(testSource, @"^(?:[-+]?[1-9]\d*|0)?(?:\.\d+)?$");
    Assert.IsTrue(match.Success);
}
于 2012-07-30T10:20:03.083 回答
0

这对我很好

    @"^\d*(?:\.\d+)?$"
于 2017-05-03T10:46:53.567 回答