Java 如何验证地理坐标?
我正在尝试验证Java 如何验证地理坐标?,java,swing,validation,gps,coordinates,Java,Swing,Validation,Gps,Coordinates,我正在尝试验证JTextField的文本。此文本字段的内容应如下所示66.160507,-153.369141或66.160507,-153.369141(逗号后无空格)。 到目前为止,我只验证了纬度和经度的范围。 在这里: 一种选择是使用正则表达式验证文本字段中内容的形式。您可以在上阅读可以在正则表达式中使用的不同符号,但某些可能使用的符号可能是 *前面的匹配项的任意数量(包括无) +前面的一个或多个匹配项 ?与前面的内容零或一个匹配 []一系列字符 \.一个点(如果反斜杠在Java字符串中
JTextField
的文本。此文本字段的内容应如下所示66.160507,-153.369141
或66.160507,-153.369141
(逗号后无空格)。
到目前为止,我只验证了纬度和经度的范围。
在这里:
一种选择是使用正则表达式验证文本字段中内容的形式。您可以在上阅读可以在正则表达式中使用的不同符号,但某些可能使用的符号可能是
前面的匹配项的任意数量(包括无)李>*
前面的一个或多个匹配项李>+
与前面的内容零或一个匹配李>?
一系列字符李>[]
一个点(如果反斜杠在Java\.
字符串中,则需要转义)
任何空白(此反斜杠也需要在\s
字符串中转义)
-?[1-9][0-9]*(\.[0-9]+)?,\s*-?[1-9][0-9]*(\.[0-9]+)?
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
}
匹配一对经纬度
这和
- 可选的减号
- 第一位数字为0以外的数字
- 任意数量的其他数字(偶数无)
- (可选)由一个小数点组成的序列,然后是任意数量的其他数字
- 逗号
- 任意数量的空白字符(偶数无)
- 这一段的前四个要点,全部重述一遍
-?[1-9][0-9]*(\.[0-9]+)?,\s*-?[1-9][0-9]*(\.[0-9]+)?
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
}
一种选择是使用正则表达式验证文本字段中内容的形式。您可以在上阅读可以在正则表达式中使用的不同符号,但某些可能使用的符号可能是
前面的匹配项的任意数量(包括无)李>*
前面的一个或多个匹配项李>+
与前面的内容零或一个匹配李>?
一系列字符李>[]
一个点(如果反斜杠在Java\.
字符串中,则需要转义)
任何空白(此反斜杠也需要在\s
字符串中转义)
-?[1-9][0-9]*(\.[0-9]+)?,\s*-?[1-9][0-9]*(\.[0-9]+)?
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
}
匹配一对经纬度
这和
- 可选的减号
- 第一位数字为0以外的数字
- 任意数量的其他数字(偶数无)
- (可选)由一个小数点组成的序列,然后是任意数量的其他数字
- 逗号
- 任意数量的空白字符(偶数无)
- 这一段的前四个要点,全部重述一遍
-?[1-9][0-9]*(\.[0-9]+)?,\s*-?[1-9][0-9]*(\.[0-9]+)?
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
}
不是你要求的,而是你想要
|
(意思是“或”)而不是和两种if
条件。你不需要否则继续
。使用JFormattedTextField
来限制输入类型(仅限十进制值),您仍然需要验证ranges@MadProgrammer听起来像是个答案。@mad程序员,谢谢,虽然我仍然需要检查所有内容是否按正确的顺序。@JaneLilep我将为纬度和经度设置一个单独的字段,JFormattedText
字段所做的是确保用户只输入数字数据,而不是您要求的数据,而是您想要的|(意思是“或”)而不是在这两种if
条件下使用和。你不需要否则继续
。使用JFormattedTextField
来限制输入类型(仅限十进制值),您仍然需要验证ranges@MadProgrammer听起来像是个答案。@mad程序员,谢谢,虽然我仍然需要检查所有内容是否按正确的顺序排列。@JaneLilep我将为纬度和经度设置一个单独的字段,JFormattedText
字段所做的是确保用户只输入数字数据。非常感谢,但是这个正则表达式使用以下输入“4390321”当它不应该的时候。同样,它也适用于这个“13.90,12.91”,但不适用于这个“13.90,12.91”(逗号后的空格)。因此,您可能需要一些调整。我想4390231
会在你的射程检查中被发现,因为90231不在-180和180之间。正则表达式只检查是否有两个用逗号分隔的数字。如果你想要一个空格,那么你可以在正则表达式中的正确位置放置一个空格和一个空格。我误读了你的问题,你说“逗号后没有空格”。再次,非常感谢!我必须学习正则表达式,因为我从未使用过它们。我可以再问你一件事吗?我不知道我是否应该问一个新问题。。。无论如何,这个正则表达式([+-]?\d+\.?\d+\s*,\s*([+-]?\d+\.?\d+)
和你的有什么区别?例如,您接受输入“3,3”,但另一个不接受;但我认为关键的一点是,表达式中的数字部分有\d+\?\d+
。现在\d
只是[0-9]
的简写;但是+
表示“一个或多个”。这是一个或多个数字,然后是一个点,然后是一个或多个数字。所以即使没有点,也必须至少有两个数字来匹配这个正则表达式。这就是为什么在您的示例中,3
与它不匹配的原因。非常感谢,但是这个正则表达式在不应该与以下输入“4390321”一起工作。它也适用于这个“13.90,12.91”,但确实如此