0

文字列に 0 以上の数字が含まれていることを検証できる正規表現を探しています。小数が任意の点にあるということは、数値が任意の数の精度の桁数を持つことができる必要があることを意味します。

数値は実際には何でもかまいません:

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]+

1つ目は通常の数字用です。0.1 のようなものを処理する 2 番目のもの

もちろん、必要に応じて ^ と $ を追加します。

これではなく、ジェームズの答えを使いたいと思います。それは好奇心のためだけです。

于 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 に答える