经纬度坐标及IP地址的正则表达式

java November 22 2013


以JS为例

经纬度坐标:

经度:<input type="text" id="lng" value="123.1254"/>纬度:<input type="text" id="lat" value="-15.267"/> //动态校验经纬坐标输入var oldLng=$("#lng").val();var oldLat=$("#lat").val();var lngRe=/^[-]?(\d|([1-9]\d)|(1[0-7]\d)|(180))(\.\d*)?$/g;var latRe=/^[-]?(\d|([1-8]\d)|(90))(\.\d*)?$/g;$("#lng,#lat").on("input change propertychange",function(){ if(this.value.match(this.id=="lng"?lngRe:latRe)==null){ this.value=(this.id=="lng"?oldLng:oldLat);//输入非法,则恢复上次正确数据 }else{//保留上次正确数据 (this.id=="lng" ? oldLng = this.value : oldLat = this.value); }});

正则表达式分析:

经度坐标范围为**-180 ~ 180**,而纬度坐标范围为**-90 ~ 90**,以经度为例,表达式可作如下拆分:

0-9,10-99,100-179,180,这样对应的表达式可分别写为\d,[1-9]\d,1[0-7]\d,(180),对他们进行“或”(|)运算,再考虑小数((\.\d*)?)以及负数(-),最后的正则表达式成为了这样:**/^[-]?(\d|([1-9]\d)|(1[0-7]\d)|(180))(\.\d*)?$/g******

同理,纬度的正则表达式就不难了(拆分步骤略,可参考经度):**/^[-]?(\d|([1-8]\d)|(90))(\.\d*)?$/g******

其实针对这类包含数字的业务情形写正则表达式时,主要是对数字的规律进行分组拆分,每一组代表一个独立的业务情形,然后将对应的各个独立的正则表达式求交集。

再看看IP地址的正则表达式,也是基于这个分组拆分法(本文只考虑IPv4)。

IP地址为四组0~255的整数,那么将问题缩小,则是考虑每组的0~255怎么拆分的问题:

因为IPv4由三个.分隔,或者说前面三组的末尾都带了个.,则表达式最终可写为:

(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])

原文链接:http://ichatter.cn/e7-bb-8f-e7-ba-ac-e5-ba-a6-e5-9d-90-e6-a0-87-e5-8f-8aip-e5-9c-b0-e5-9d-80-e7-9a-84-e6-ad-a3-e5-88-99-e8-a1-a8-e8-be-be-e5-bc-8f.html


欢迎来到阿J小虫的博客

Follow @ichatter on GitHub

最新评论

推荐内容