我正在寻找能够验证字符串是否包含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().");
}
}
答案 0 :(得分:4)
这应该做的工作:
Regex isnumber = new Regex(@"^[0-9]+(\.[0-9]+)?$");
答案 1 :(得分: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
}
答案 2 :(得分:1)
[1-9][0-9]*(\.[0-9]+)? | 0\.[0-9]+
第一个是普通数字。 第二个处理像0.1
这样的事情当然,根据需要添加^和$。
我宁愿选择詹姆斯的回答而不是这个。这只是为了好奇。
答案 3 :(得分: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);
}
答案 4 :(得分:0)
这对我很好用
@"^\d*(?:\.\d+)?$"