Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 验证gps坐标横向和纵向_C#_Regex - Fatal编程技术网

C# 验证gps坐标横向和纵向

C# 验证gps坐标横向和纵向,c#,regex,C#,Regex,我从这里取了两个正则表达式: 它应该正确验证纬度和经度。然而,有些地方出了问题,对于有效坐标,它给了我错误的信息 示例(有效)坐标,根据方法regex,该坐标无效 Lat: 53.0102721 Lon: 18.6048094 代码: 注意:它不需要是正则表达式。无论设置了什么样的分隔符pc设置,都可以检查是否使用了点(.)。我对任何其他主张持开放态度。验证坐标的一种更简单的方法是将字符串解析为数值,并验证它是否在-90和90(纬度)以及-180和180(经度)之间: 解析为双精度然后进行验证

我从这里取了两个正则表达式: 它应该正确验证纬度和经度。然而,有些地方出了问题,对于有效坐标,它给了我错误的信息

示例(有效)坐标,根据方法regex,该坐标无效

Lat: 53.0102721
Lon: 18.6048094
代码:


注意:它不需要是正则表达式。无论设置了什么样的分隔符pc设置,都可以检查是否使用了点(.)。我对任何其他主张持开放态度。

验证坐标的一种更简单的方法是将字符串解析为数值,并验证它是否在-90和90(纬度)以及-180和180(经度)之间:


解析为双精度然后进行验证会更简单:

public static bool IsValidLatitude(string latitude)
    => double.TryParse(latitude, out var l) && -90 <= l && l <= 90;

public static bool IsValidLongitude(string longitude)
    => double.TryParse(longitude, out var l) && -180 <= l && l <= 180;

d{1,6}
匹配1-6个数字,并且
53.0102721
在点后有7个数字。@第四只鸟的意思是正则表达式不正确或更简单,而不是复杂的正则表达式:使用
decimal.TryParse
解析字符串,并验证结果是否介于-90和90或-180和180之间。为什么使用正则表达式而不是数字类型?@johnathanbarclaydon;i don’我不知道我不是正则表达式专家,只是从原始postCan中获取了它,您可以修改以确保使用(.)点?为什么要将此数据存储为字符串?最好使用十进制或浮点类型。小数点分隔符只是一种表示法。您能告诉我N7是什么吗?小数点精度更高,但双精度也适用于这种情况。您能修改以确保使用(.)点吗?不是这样::“不变区域性对区域性不敏感”。@Arie是,唯一需要注意的是,
NumberStyles.Float
允许尾随和前导空格,这可能是个问题,也可能不是问题。如果是,则将其替换为
NumberStyles.allowReadingSign | NumberStyles.AllowDecimalPoint
NumberStyles.Float
仍将进行修剪。如果无效,请使用
NumberStyles.allowReadingSign | NumberStyles.AllowDecimalPoint
string latitudeString = "53.0102721";
string longitudeString = "18.6048094";

        bool latitudeIsValid = decimal.TryParse(latitudeString, NumberStyles.AllowDecimalPoint|NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out var latitude) 
                              && Math.Abs(latitude) < 90);
        bool longitudeIsValid = decimal.TryParse(longitudeString, NumberStyles.AllowDecimalPoint|NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out var longitude) 
                              && Math.Abs(longitude) < 180);
string latitudeAsString = latitude.ToString("N7", CultureInfo.InvariantCulture);    
public static bool IsValidLatitude(string latitude)
    => double.TryParse(latitude, out var l) && -90 <= l && l <= 90;

public static bool IsValidLongitude(string longitude)
    => double.TryParse(longitude, out var l) && -180 <= l && l <= 180;
public static bool IsValidLatitude(string latitude)
    => double.TryParse(latitude, NumberStyles.Float, CultureInfo.InvariantCultute, out var l)
        && -90 <= l && l <= 90;

public static bool IsValidLongitude(string longitude)
    => double.TryParse(longitude, NumberStyles.Float, CultureInfo.InvariantCultute, out var l)
        && -180 <= l && l <= 180;