如何验证地理坐标?
How to validate geographic coordinates?
我正在尝试验证 JTextField
的文本。此文本字段的内容应类似于 66.160507, -153.369141
或 66.160507,-153.369141
(逗号后没有空格)。
到目前为止,我只验证纬度和经度的范围。
这里:
String [] splitted = jtextField.getText().split(",");
double latitude = Double.parseDouble(splitted[0]);
double longitude = Double.parseDouble(splitted[1])
if(latitude < -90 || latitude > 90)
return false;
else
continue;
if(longitude < -180 || longitude > 180)
return false;
else
continue;
但现在如何检查 JTextField
中的文本格式和顺序是否正确?我需要验证这两种情况:
must be a double -> must be a comma -> must be a whitespace -> must be a double
must be a double -> must be a comma -> must be a double
一种选择是使用正则表达式来验证文本字段中内容的形式。您可以在 the Javadoc for the Pattern class 阅读可以在正则表达式中使用的不同符号,但您可能会使用的一些符号是
*
之前发生的任意数量的匹配(包括 none);
+
一场或多场之前的比赛;
?
零个或一个之前的匹配项;
[ ]
字符范围。
\.
一个点(反斜杠如果在 Java String
文字中则需要转义),
\s
任何空格(这个反斜杠也需要在 String
文字中转义)。
把这些放在一起你可能会想出这样的正则表达式。
-?[1-9][0-9]*(\.[0-9]+)?,\s*-?[1-9][0-9]*(\.[0-9]+)?
匹配一对经纬度。
这匹配
- 可选减号,
- 第一个数字不是 0,
- 任意数量的其他数字(甚至none),
- 可选,一个由小数点组成的序列,然后是任意数量的其他数字,
- 一个逗号,
- 任意数量的空白字符(甚至none),
- 本段中的前四个要点,重复一遍。
你可以这样写代码。
String textValue = jtextField.getText();
String twoDoublesRegularExpression = "-?[1-9][0-9]*(\.[0-9]+)?,\s*-?[1-9][0-9]*(\.[0-9]+)?";
if (textValue.matches(twoDoublesRegularExpression)) {
// this value is OK
}
我正在尝试验证 JTextField
的文本。此文本字段的内容应类似于 66.160507, -153.369141
或 66.160507,-153.369141
(逗号后没有空格)。
到目前为止,我只验证纬度和经度的范围。
这里:
String [] splitted = jtextField.getText().split(",");
double latitude = Double.parseDouble(splitted[0]);
double longitude = Double.parseDouble(splitted[1])
if(latitude < -90 || latitude > 90)
return false;
else
continue;
if(longitude < -180 || longitude > 180)
return false;
else
continue;
但现在如何检查 JTextField
中的文本格式和顺序是否正确?我需要验证这两种情况:
must be a double -> must be a comma -> must be a whitespace -> must be a double
must be a double -> must be a comma -> must be a double
一种选择是使用正则表达式来验证文本字段中内容的形式。您可以在 the Javadoc for the Pattern class 阅读可以在正则表达式中使用的不同符号,但您可能会使用的一些符号是
*
之前发生的任意数量的匹配(包括 none);+
一场或多场之前的比赛;?
零个或一个之前的匹配项;[ ]
字符范围。\.
一个点(反斜杠如果在 JavaString
文字中则需要转义),\s
任何空格(这个反斜杠也需要在String
文字中转义)。
把这些放在一起你可能会想出这样的正则表达式。
-?[1-9][0-9]*(\.[0-9]+)?,\s*-?[1-9][0-9]*(\.[0-9]+)?
匹配一对经纬度。
这匹配
- 可选减号,
- 第一个数字不是 0,
- 任意数量的其他数字(甚至none),
- 可选,一个由小数点组成的序列,然后是任意数量的其他数字,
- 一个逗号,
- 任意数量的空白字符(甚至none),
- 本段中的前四个要点,重复一遍。
你可以这样写代码。
String textValue = jtextField.getText();
String twoDoublesRegularExpression = "-?[1-9][0-9]*(\.[0-9]+)?,\s*-?[1-9][0-9]*(\.[0-9]+)?";
if (textValue.matches(twoDoublesRegularExpression)) {
// this value is OK
}