博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java后端校验
阅读量:4882 次
发布时间:2019-06-11

本文共 14858 字,大约阅读时间需要 49 分钟。

  网站的后端校验是不可或缺的一部分,我们在后台验证表单时,可能需要把前端传过来的字段一个一个手工校验,或者使用框架的校验去做,今天我编写了一个校验框架,记录如下,

和大家一起分享。《转载请注明出处,谢谢》

1.代码总览

将需要校验的表单信息设置在src目录下的formVerify.xml里;

Xmlparse4FormVerify.java负责读取解析formVerify.xml文件;

VerifyRegularUtil.java负责处理正则表达式相关工作;

 

2.下面是具体文件及代码

1.formVerify.xml

1 
2
3
4
5
用户名
6
required,min_3,max_20,email
7
8
9
密码
10
required,min_3,max_20
11
12
13
手机
14
phone
15
16
17
电话
18
tel
19
20
21
邮编
22
yzbm
23
24
25
身份证
26
sfz
27
28
29
url
30
url
31
32
33
ip
34
ip
35
36
37
mac
38
mac
39
40 41
42
小数点两位
43
decimal
44
45
46
数字
47
num
48
49 50
51
正整数
52
n
53
54
55 56
57
58
用户名
59
required,min_3,max_20,email
60
61
62
密码
63
required,min_3,max_20
64
65
66
手机
67
phone
68
69
70
formVerify.xml

2.VerifyRegularUtil.java(参考网址:http://www.cnblogs.com/silentjesse/p/3242701.html)

1 /**  2  *   3  */  4 package com.linker.util;  5   6 import java.util.regex.Pattern;  7   8 /**  9  * Title:VerifyRegularUtil  10  * description: 验证表单的工具包 11  * company: linker 12  * @author zhanjp 13  * @date 2016年2月22日 上午11:00:52 14  */ 15 public class VerifyRegularUtil { 16     //邮箱 17     private String email = "^([\\w-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$"; 18     //手机 19     private String phone = "^[1]+[3,5]+\\d{9}$"; 20     //电话 21     private String tel = "^(\\d{3,4}-)?\\d{6,8}$"; 22     //邮编 23     private String yzbm = "^\\d{6}$"; 24     //身份证 25     private String sfz = "(^\\d{18}$)|(^\\d{15}$)"; 26      27     //url 28     private String url = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?"; 29     //ip 30     private String ip = "^((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]|[*])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]|[*])$"; 31     //物理地址 32     private String mac = "^[A-F0-9]{2}(-[A-F0-9]{2}){5}$";   33      34     //两位小数 35     private String decimal = "^[0-9]+(.[0-9]{2})?$"; 36     //数字 37     private String num = "^[0-9]*$"; 38     //正整数 39     private String n = "^\\+?[1-9][0-9]*$"; 40      41     /** 42      * 校验表单 43      * @param data 44      * @return 45      */ 46     public String verify(String value,String preText,String rule)throws Exception{ 47         String[] rs = rule.split(","); 48         String errorInfo = null; 49         for(String s:rs){ 50             if(s.indexOf("|")<0&&s.indexOf("_")<0){ 51                 //包含“|”是指或者的关系,比如输入框可以输入邮箱或者手机号,包含“_”,比如min_6指最小6位 52                 switch (s) { 53                 //需要特殊说明文字的在此添加case 54                 case "required": 55                     if(value!=null&&value.trim().length()>0){ 56                          57                     }else{ 58                         errorInfo = preText + "不能为空"; 59                     } 60                     break; 61                 //通用说明走else 62                 default: 63                     errorInfo = verifyByRegular(value,preText,s); 64                     break; 65                 } 66                 if(errorInfo!=null){ 67                     //如果已有错误信息,则不需要再次循环 68                     break; 69                 } 70             }else{ 71                 if(s.indexOf("|")>=0){ 72                     //包含"或者关系",一般"|"和"_"不会共存,在此不做考虑 73                     if(s.indexOf("_")>=0){ 74                         throw new Exception(preText + "规则配置错误"); 75                     } 76                     String[] s1 = s.split("|"); 77                     for(String s2:s1){ 78                         errorInfo = verifyByRegular(preText, value, s2); 79                         if(errorInfo==null){ 80                             break; 81                         } 82                     } 83                 }else if(s.indexOf("_")>=0){ 84                     String[] s1 = s.split("_"); 85                     if(s1[0].equals("min")){ 86                         errorInfo = minLen(preText, value, Integer.parseInt(s1[1])); 87                     }else if(s1[0].equals("max")){ 88                         errorInfo = maxLen(preText, value, Integer.parseInt(s1[1])); 89                     }else{ 90                         throw new Exception("暂不支持这种校验格式:" + s1[0]); 91                     } 92                 } 93                 if(errorInfo!=null){ 94                     //如果已有错误信息,则不需要再次循环 95                     break; 96                 } 97                  98             } 99         }100         return errorInfo;101     }102     103     /**104      * 根据正则表达式判断是否成立105      * @param preText 必传,字段名称106      * @param value 必传,字段值107      * @param r 必传,校验类型108      * @return109      */110     private String verifyByRegular(String value,String preText,String r)throws Exception{111         String errorInfo = null;112         String regex = "";113         switch (r) {114         case "email":115             regex = email;116             break;117         case "phone":118             regex = phone;119             break;120         case "tel":121             regex = tel;122             break;123         case "yzbm":124             regex = yzbm;125             break;126         case "sfz":127             regex = sfz;128             break;129         case "n":130             regex = n;131             break;132         case "url":133             regex = url;134             break;135         case "ip":136             regex = ip;137             break;138         case "mac":139             regex = mac;140             break;141         case "decimal":142             regex = decimal;143             break;144         case "num":145             regex = num;146         default:147             break;148         }149         if(regex.equals("")){150             throw new Exception("暂不支持这种校验格式:" + r);151         }else{152             boolean flg = Pattern.matches(regex, value);153             if(flg){154 155             }else{156                 errorInfo = preText + "格式不正确,请重新检查!";157             }158         }159         return errorInfo;160     }161     162     163     /**164      * 校验最少长度165      * @param preText166      * @param value167      * @param min168      * @return169      */170     private String minLen(String preText,String value,int min){171         String errorInfo = null;172         if(value!=null&&value.trim().length()>=min){173             174         }else{175             errorInfo = preText + "最少长度为" + min +"位。";176         }177         return errorInfo;178     }179     180     private String maxLen(String preText,String value,int max){181         String errorInfo = null;182         if(value!=null&&value.trim().length()<=max){183             184         }else{185             errorInfo = preText + "最大长度为" + max +"位。";186         }187         return errorInfo;188     }189     190 }
VerifyRegularUtil.java

3.Xmlparse4FormVerify.java

1 /**  2  *   3  */  4 package com.linker.util;  5   6 import java.io.File;  7 import java.io.IOException;  8 import java.util.ArrayList;  9 import java.util.Iterator; 10 import java.util.List; 11 import java.util.Map; 12 import java.util.Set; 13  14 import javax.xml.parsers.DocumentBuilder; 15 import javax.xml.parsers.DocumentBuilderFactory; 16 import javax.xml.parsers.ParserConfigurationException; 17  18 import org.w3c.dom.Document; 19 import org.w3c.dom.Element; 20 import org.w3c.dom.Node; 21 import org.w3c.dom.NodeList; 22 import org.xml.sax.SAXException; 23  24 /** 25  * Title:Xmlparse4FormVerify  26  * description: 读取xml中配置的表单验证信息 27  * company: linker 28  * @author zhanjp 29  * @date 2016年2月22日 上午9:33:59 30  */ 31 public class Xmlparse4FormVerify { 32  33     private static DocumentBuilder db = null; 34      35     private static DocumentBuilderFactory dbf = null; 36      37     private static Document dt = null; 38      39     public static Xmlparse4FormVerify xp; 40      41      42     /** 43      * 初始化DocumentBuilder等信息 44      * @return 45      */ 46     public Xmlparse4FormVerify getInstance(){ 47         if(xp==null){ 48             xp = new Xmlparse4FormVerify(); 49         } 50         return xp; 51     } 52      53     static{ 54         try { 55             //返回documentBuilderFactory 56             dbf = DocumentBuilderFactory.newInstance(); 57              58             db = dbf.newDocumentBuilder(); 59             String basePath = new Xmlparse4FormVerify().getClass().getClassLoader().getResource("/").getPath(); 60             File f = new File(basePath + "formVerify.xml"); 61             //获取xml文件的dom对象 62             dt = db.parse(f); 63         } catch (ParserConfigurationException  e) { 64             e.printStackTrace(); 65             System.out.println("class:Xmlparse4FormVerify>>documentBuilder对象初始化失败。"); 66         } catch (SAXException | IOException e) { 67             // TODO Auto-generated catch block 68             e.printStackTrace(); 69             System.out.println("class:Xmlparse4FormVerify>>解析formVerify.xml文档失败"); 70         } 71     } 72      73     /** 74      * 根据表单ID和表单参数进行校验 75      * @param formId 表单ID 76      * @param pMap 表单参数 77      * @return flag-0:成功,1:失败; msg-消息 78      * @throws Exception 79      */ 80     public static String verifyForm(String formId,Map
pMap)throws Exception{ 81 if(dt==null){ 82 throw new Exception("未能正确初始化。"); 83 } 84 String errorInfo = null; 85 //开始解析xml文档 86 //获取xml文件跟节点 87 Element element = dt.getDocumentElement(); 88 //获取根节点下的子节点列表 89 NodeList cList = element.getChildNodes(); 90 List
forms = new ArrayList<>(); 91 for (int i = 0; i < cList.getLength(); i++) { 92 Node tNode = cList.item(i); 93 if(tNode.getNodeName().equals("form")){ 94 forms.add(tNode); 95 } 96 } 97 for (int i = 0; i < forms.size(); i++) { 98 Node node1 = forms.get(i); 99 String nodeId = node1.getAttributes().getNamedItem("id").getNodeValue();100 // System.out.println("节点id:" + nodeId+","+"节点name"+node1.getNodeName());101 if(nodeId.equals(formId)){102 NodeList cList2 = node1.getChildNodes();103 //开始校验104 Set
keys = pMap.keySet();105 Iterator
iter = keys.iterator();106 while (iter.hasNext()) {107 String key = iter.next();108 for (int j = 0; j < cList2.getLength(); j++) {109 Node node = cList2.item(j);110 // System.out.println("clist2,node:"+node.getNodeName());111 if(node.getNodeName().equals(key)){112 String value = pMap.get(key);113 String preText = "";114 String rule = "";115 NodeList cList3 = node.getChildNodes();116 117 for(int m = 0;m < cList3.getLength(); m++){118 if(cList3.item(m).getNodeName()=="text"){119 preText = cList3.item(m).getTextContent();120 }else if(cList3.item(m).getNodeName()=="rule"){121 rule = cList3.item(m).getTextContent();122 }123 }124 //TODO 校验125 errorInfo = new VerifyRegularUtil().verify(value, preText, rule);126 if(errorInfo!=null){127 return errorInfo;128 }129 }130 }131 132 }133 break;134 }135 }136 return errorInfo;137 }138 }
Xmlparse4FormVerify.java

4.测试代码:(本项目控制层SpringMvc,可根据自己情况适当更改)

1 @RequestMapping(value="/test2017") 2     public void test2(){ 3         HashMap
pMap = new HashMap<>(); 4 pMap.put("name", "944593237@qq.com"); 5 pMap.put("pwd", "123456"); 6 pMap.put("phone", "15138456324"); 7 pMap.put("tel", "123456"); 8 pMap.put("yzbm", "3100562"); 9 pMap.put("sfz", "413025199802243366");10 pMap.put("url", "http://www.baidu.com");11 pMap.put("ip", "172.1.4.113");12 pMap.put("mac", "EC-B1-D7-49-20-33");13 pMap.put("decimal", "123456.22");14 pMap.put("num", "123");15 pMap.put("n", "2");16 try {17 String errorInfo = Xmlparse4FormVerify.verifyForm("test2", pMap);18 if(errorInfo!=null){19 System.out.println(errorInfo);20 }else{21 System.out.println("表单验证通过!");22 }23 } catch (Exception e) {24 // TODO Auto-generated catch block25 e.printStackTrace();26 }27 }
测试

 

转载于:https://www.cnblogs.com/bolg666/p/5207881.html

你可能感兴趣的文章
PHP手动环境搭建之WAMP
查看>>
COJ 1003 WZJ的数据结构(三)ST表
查看>>
sbrk and coreleft
查看>>
树型DP
查看>>
怎么在ubuntu上使用pidgin登陆QQ
查看>>
思维的惰性
查看>>
2018-2019-2 网络对抗技术 20165115 Exp3 免杀原理与实践
查看>>
【Android】学习记录<1> -- 初识ffmpeg
查看>>
定位页面元素的位置
查看>>
关于IAsyncResult接口的CompletedSynchronously属性
查看>>
Python:一篇文章掌握Numpy的基本用法
查看>>
序列化与ArrayList 的elementData的修饰关键字transient
查看>>
学习进度17
查看>>
编译原理——算符优先分析文法(附源代码)
查看>>
jboss的启动过程
查看>>
渲染部分
查看>>
力扣——所有可能的路径
查看>>
关于VS项目平台的x86,x64,Any CPU以及Debug和Release的区别
查看>>
解密module_init幕后的故事
查看>>
9个移动网站优化的最佳实践
查看>>