标签:
对于正则表达式,很多朋友一定不陌生,因为在我们做网站或apk时,当需要用户提交表单时,很多时间需要判断用户的输入是否合法,这个时间正则表达式就可以发挥它的作用了,我们知道正则表达式在这个方面是很强大的,本篇我将为大家介绍一下,正则表达式在Android和JSP中的使用方法。
对于正则表达式的基础介绍请参考:http://www.cnblogs.com/AndroidJotting/p/RegExp.html
首先为大家介绍一下正则表达式在JSP中的使用规范(JSP代码):
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>正则表达式</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <script type="text/javascript" language="javascript"> function judge(form){ var cn = form.cn; var cn_text = /^[\u0391-\uFFE5]+$/;//中文匹配 //var cn_text = /^\w*$/;//中文匹配 var en = form.en; var en_text = /^[A-Za-z]+$/;//字母匹配 var num = form.num; var num_text = /^[0-9]+$/;//数字匹配 var emal = form.emal; var emal_text = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;//emal匹配 var phone = form.phone; var phone_text = /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/;//7位电话号码 var url = form.url; var url_text = /^http:\/\/w{3}\.[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\‘:+!]*([^<>\"\"])*$/;//网址匹配 var qq = form.qq; var qq_text = /^[1-9]\d{4,11}$/;//匹配QQ号 var fuhao = form.fuhao; var fuhao_text = /^[^%&’,;=?$x22]+$/;//匹配特殊符号 if(!cn_text.test(cn.value)){ alert("请输入中文。"); cn.select(); cn.focus(); return false; }else{ if(!en_text.test(en.value)){ alert("请输入英文字符。"); en.select(); en.focus(); return false; }else{ if(!num_text.test(num.value)){ alert("请输入数字。"); num.select(); num.focus(); return false; }else{ if(!emal_text.test(emal.value)){ alert("邮箱格式不对。"); emal.select(); emal.focus(); return false; }else{ if(!phone_text.test(phone.value)){ alert("电话格式不对."); phone.select(); phone.focus(); return false; }else{ if(!url_text.test(url.value)){ alert("网址输入的格式不正确。"); url.value="http://www."; url.focus(); return false; }else{ if(!qq_text.test(qq.value)){ alert("QQ输入的格式不正确。"); qq.select(); qq.focus(); return false; }else{ if(!fuhao_text.test(fuhao.value)){ alert("请输入特殊符号。"); fuhao.select(); fuhao.focus(); return false; } } } } } } } } } </script> </head> <body><center> <form action="#" method="post" id="form" name="form" onsubmit="return judge(this)"> 中文:<input type="text" name="cn"><br/> 英文:<input type="text" name="en"><br/> 数字:<input type="text" name="num"><br/> 邮箱:<input type="text" name="emal"><br/> 电话:<input type="text" name="phone"><br/> 网址:<input type="text" name="url"><br/> QQ: <input type="text" name="qq"><br/> 符号:<input type="text" name="fuhao"><br/> <input type="submit" value="提交"> </form> </center></body> </html>
代码没有什么难点,就不再赘述了,大家可以可以复制、粘贴测试一下,这样可以更好的理解。
下面我们来一起探讨一下正则表达式在Android中的使用:
1、验证用户名为例,用户名一般字母开头,允许字母数字下划线,5-16个字节:
String regEx = "^[a-zA-Z][a-zA-Z0-9_]{4,15}$"; Pattern pattern = Pattern.compile(regEx); Matcher matcher = pattern.matcher(userName); boolean b = matcher.matches();
匹配的话b为true,否则为false
2、电话、邮箱、数字判断:
//判断手机格式是否正确 public boolean isMobileNO(String mobiles) { Pattern p = Pattern .compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"); Matcher m = p.matcher(mobiles); return m.matches(); } //判断email格式是否正确 public boolean isEmail(String email) { String str = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$"; Pattern p = Pattern.compile(str); Matcher m = p.matcher(email); return m.matches(); } //判断是否全是数字 public boolean isNumeric(String str) { Pattern pattern = Pattern.compile("[0-9]*"); Matcher isNum = pattern.matcher(str); if (!isNum.matches()) { return false; } return true; } }
最后在为大家简单介绍一些有关JAVA的正则表达式:
a.java验证IP地址:
Pattern pattern = Pattern.compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b"); Matcher matcher = pattern.matcher("127.400.600.2"); //以验证127.400.600.2为例 System.out.println(matcher.matches());
b.java验证日期时间,解决润月:
Pattern pattern = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$"); Matcher matcher = pattern.matcher("2000-02-29 23:59:59"); System.out.println(matcher.matches());
c.java验证邮箱格式:
Pattern pattern = Pattern.compile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$"); Matcher matcher = pattern.matcher("a@aa.com"); System.out.println(matcher.matches());
附带为大家介绍一下我国电话号码段的知识:
根据实际开发于2009年9月7日最新统计:
中国电信发布中国3G号码段:中国联通185,186;中国移动188,187;中国电信189,180共6个号段。
3G业务专属的180-189号段已基本分配给各运营商使用, 其中180、189分配给中国电信,187、188归中国移动使用,185、186属于新联通。
中国移动拥有号码段:139、138、137、136、135、134、159、158、157(3G)、152、151、150、188(3G)、187(3G);14个号段
中国联通拥有号码段:130、131、132、155、156(3G)、186(3G)、185(3G);6个号段
中国电信拥有号码段:133、153、189(3G)、180(3G);4个号码段
移动:
2G号段(GSM网络)有139,138,137,136,135,134(0-8),159,158,152,151,150
3G号段(TD-SCDMA网络)有157,188,187
147是移动TD上网卡专用号段.
联通:
2G号段(GSM网络)有130,131,132,155,156
3G号段(WCDMA网络)有186,185
电信:
2G号段(CDMA网络)有133,153
3G号段(CDMA网络)有189,180
标签:
原文地址:http://www.cnblogs.com/AndroidJotting/p/4510643.html