急求 !! 正则表达式验证经度纬度

chenpengyu1234 2012-05-03 08:18:31
例如:经度,120.234444 纬度:31:000000

谢谢 小数点后6位。
...全文
2076 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenpengyu1234 2012-05-04
  • 打赏
  • 举报
回复
谢谢 ldh911,十分感谢,实在对正则一点都了解。谢谢你的帮助。
huage 2012-05-04
  • 打赏
  • 举报
回复
为什么一定要正侧呢? 经纬度可以用范围值比较吧,
MiceRice 2012-05-04
  • 打赏
  • 举报
回复
呃。。。也要做拆分,不过这个相对简单:
String regWD = "(-|\\+)?(90\\.0{4,6}|(\\d|[1-8]\\d)\\.\\d{4,6})";


对了,之前那个,有个地方写错了,漏了关于小数点的转义,修改下:
String regJD = "(-|\\+)?(180\\.0{4,6}|(\\d{1,2}|1([0-7]\\d))\\.\\d{4,6})";
安特矮油 2012-05-04
  • 打赏
  • 举报
回复
这个应该可以,排除了00.xxx的情况
(-|\\+)?(90.0{4,6}|([1-9]\\d{1}.\\d{4,6}|(\\d{1}.\\d{4,6})))
chenpengyu1234 2012-05-04
  • 打赏
  • 举报
回复
纬度怎么验证?-90 ~+ 90 正则完全不会写,改了半天也改不正确,麻烦你了前辈。
[Quote=引用 9 楼 的回复:]

引用 8 楼 的回复:
你写的正则如果说是99.8989 false


对,因为你要求小数位数要6位,所以这个肯定是 false

99.898900 这个才是 true

当然你可以自己调整比如:
String reg = "(-|\\+)?(180.0{4,6}|(\\d{1,2}|1([0-7]\\d))\\.\\d{4,6})";
就允许4~6位,超出或少于都错误……
[/Quote]
MiceRice 2012-05-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
你写的正则如果说是99.8989 false
[/Quote]

对,因为你要求小数位数要6位,所以这个肯定是 false

99.898900 这个才是 true

当然你可以自己调整比如:
String reg = "(-|\\+)?(180.0{4,6}|(\\d{1,2}|1([0-7]\\d))\\.\\d{4,6})";
就允许4~6位,超出或少于都错误。
chenpengyu1234 2012-05-04
  • 打赏
  • 举报
回复
我自己问题描述的不是很清楚,总之很谢谢。
我的意思是如果验证经度的范围是 -180 ~+180 输入的经度必须在这个范围内,小数点后6位。
你写的正则如果说是99.8989 false


并不是(-|\\+)?(180.000000|(\\d{1,2}|1([0-7]\\d))\\.\\d{6})

[Quote=引用 7 楼 的回复:]

\\d 就是数字,[0-9]
\\d{1,2} 就是1~2位数字
[0-7] 就是只允许01234567这7个字符

正则不支持取值范围的写法,也就是你没法直接写:-180~+180

所以只能约束其组合顺序,拆分为三种情况:
1、3位数且刚好:180;
2、1位数或2位数:随意组合都行;
3、3位数且百位是1,十位是0-7,个位随意。
[/Quote]
MiceRice 2012-05-04
  • 打赏
  • 举报
回复
\\d 就是数字,[0-9]
\\d{1,2} 就是1~2位数字
[0-7] 就是只允许01234567这7个字符

正则不支持取值范围的写法,也就是你没法直接写:-180~+180

所以只能约束其组合顺序,拆分为三种情况:
1、3位数且刚好:180;
2、1位数或2位数:随意组合都行;
3、3位数且百位是1,十位是0-7,个位随意。

chenpengyu1234 2012-05-03
  • 打赏
  • 举报
回复
请教下\\d{1,2}这里是什么意思 ?[0-7]这里也不明白。经度纬度问题第一次遇到,希望你能给我讲解下谢谢。
[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:
这个有问题,我自己完全不会写正则。


有什么问题?我测试结果是:

String reg = "(-|\\+)?(180.000000|(\\d{1,2}|1([0-7]\\d))\\.\\d{6})";
System.out.println("1.000000".matches(reg)); //true
……
[/Quote]
MiceRice 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
这个有问题,我自己完全不会写正则。
[/Quote]

有什么问题?我测试结果是:

String reg = "(-|\\+)?(180.000000|(\\d{1,2}|1([0-7]\\d))\\.\\d{6})";
System.out.println("1.000000".matches(reg)); //true
System.out.println("20.000000".matches(reg)); //true
System.out.println("-20.000000".matches(reg)); //true
System.out.println("120.234444".matches(reg)); //true
System.out.println("-180.000000".matches(reg)); //true
System.out.println("180.000000".matches(reg)); //true
System.out.println("180.000001".matches(reg)); //false
System.out.println("1.00000".matches(reg)); //false
System.out.println("1.0000000".matches(reg)); //false
chenpengyu1234 2012-05-03
  • 打赏
  • 举报
回复
这个有问题,我自己完全不会写正则。
MiceRice 2012-05-03
  • 打赏
  • 举报
回复
考虑数值有效性的话,就是取值范围必须限制在: -180~180

就麻烦多了,大致是:
String reg = "(-|\\+)?(180.000000|(\\d{1,2}|1([0-7]\\d))\\.\\d{6})";

if ("120.234444".matches(reg))
chenpengyu1234 2012-05-03
  • 打赏
  • 举报
回复
考虑有效性。谢谢你帮我写下
MiceRice 2012-05-03
  • 打赏
  • 举报
回复
不考虑数值有效性的话,就是:
if (str.matches("\\d{1,3}\\.\\d{6}"))

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧