检查坐标有效性 - UITextField - iOS

时间:2015-09-09 09:26:10

标签: ios objective-c regex uitextfield coordinates

我有一个带有两个UITextFields的iOS应用,允许用户手动输入纬度和经度坐标。我很困惑的一件事是,如何确保输入的数据是有效的坐标?

  • 仅限数字
  • 坐标可以有减号。
  • 坐标中不能有空格。

你能说我还有其他检查吗?

我怎样才能检查UITextField.text是否有字母和数字?我可以使用正则表达式吗?

更新

所以为了澄清我的问题,这些是我要检查的字符串类型:

  • -2.42353463466(有效)
  • 32.131ertf22(无效 - 包含字符)
  • 1.23141 4124(无效 - 包含空格)

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来验证数字,但更简单的方法是尝试使用double将每个文本字段的字符串值转换为NSNumberFormatter并查看如果有效:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle = NSNumberFormatterDecimalStyle;

NSNumber *number = [numberFormatter numberFromString:myTextField.text];

if (number != nil) {
    // The number is correct!
    double coordinate = number.doubleValue;
    NSLog(@"Coordinate: %f", coordinate);
} else {
    // The number is incorrect!
    NSLog(@"Invalid coordinate entered.");
}

一旦您为每个坐标部分获得了double个,就可以使用CLLocationCoordinate2D函数形成CLLocationCoordinate2DMake

形成CLLocationCoordinate2D后,您可以使用CLLocationCoordinate2DIsValid功能检查纬度和经度部分是否在正确的范围内。

答案 1 :(得分:1)

您可以检查特定CLLocationCoordinate2D是否有效

CLLocationCoordinate2D myCoordinate=CLLocationCoordinate2DMake(latitude, longitude);

if (CLLocationCoordinate2DIsValid(myCoordinate)) {
  NSLog(@"Coordinate valid");
} else {
  NSLog(@"Coordinate invalid");
}