一个简单java服务器端参数检测
1、可以做扩展应用
2、减少代码编写量,统一检测路口
3、降低学习门槛、减少学习成本
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ValidatorUtil {
public final static String EMAIL_REG = "^([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})(\\]?)$";
public final static String MOBILENO_REG = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";
public final static String NUMBER_REG = "^(0|[1-9]\\d*)$|^(0|[1-9]\\d*)\\.(\\d+)$";
/**
* 检测单个字符串
*
* @param str
* 需要检测的字符串
* @param rule
* 检测的规则 规则如下:
* 1、空检测 自动检测
* 2、长度检测使用Len(5,10),没有下限Len(0,10),没有上限Len(5,0);
* 3、规则匹配检测isEmail,isMobile,isIp,isCard
* 4、类型检测int、number(int表示必须是整数、number表示为数字)
* 5、多规则以“|”分隔,例如Len(5,10)|isMail|int
* @param desc
* 描述 可以为空
* @return 检测通过,返回Null,检测不通过返回对应的错误信息
*/
public static String checkStr(String str, String ruleStr, String desc) {
// 规则检测
if (isEmpty(ruleStr)) {
return desc + "规则字符串为空!";
}
if (isEmpty(desc)) {
desc = "";
}
// 字符串空检测
if (isEmpty(str)) {
return desc + "检测的字符串为空!";
}
// 解析规则
// 解析长度验证
Pattern patternLen = Pattern.compile("Len\\((\\d{1}),(\\d{1,})\\)*");
Matcher matcherLen = patternLen.matcher(ruleStr);
if (matcherLen.find()) {
try {
int minLen = Integer.parseInt(matcherLen.group(1));
int maxLen = Integer.parseInt(matcherLen.group(2));
String matchLenRs = matchLen(str, minLen, maxLen);
if (!isEmpty(matchLenRs))
return desc+matchLenRs;
} catch (Exception e) {
return desc + "长度配置有误!";
}
}
// 解析规则匹配
Pattern patternReg = Pattern
.compile("(isEmail)|(isMobile)|(isIp)|(isCard)");
Matcher matcherReg = patternReg.matcher(ruleStr);
if (matcherReg.find()) {
if (matcherReg.group(1) != null) {
// 验证邮箱
if (!isEmail(str, null)) {
return "邮箱格式错误!";
}
} else if (matcherReg.group(2) != null) {
if (!isMobileNO(str, null)) {
return "手机号码格式错误!";
}
} else if (matcherReg.group(3) != null) {
// 验证Ip地址
} else {
// 验证身份证
}
}
// 解析类型匹配
Pattern patternType = Pattern.compile("(int)|(number)");
Matcher matcherType = patternType.matcher(ruleStr);
if (matcherType.find()) {
if (matcherType.group(1) != null) {
// 验证为整数
try {
Integer.parseInt(str);
} catch (Exception e) {
return desc + "不是整数!";
}
} else {
// 验证为数字
if (!isNumber(str, null)) {
return desc + "不是数字!";
}
}
}
return null;
}
/**
* 字符串长度匹配
*
* @param str
* 匹配字符串
* @param minLen
* 最小长度,没有限制为0
* @param maxLen
* 最大长度,没有限制为0
* @return
*/
public static String matchLen(String str, int minLen, int maxLen) {
if (maxLen <= minLen) {
return "最大长度必须大于最小长度!";
}
if (minLen > 0 && str.length() < minLen)
return "不满足最小长度!";
if (maxLen > 0 && str.length() > maxLen)
return "不满足最大长度!";
return null;
}
/**
* 是否是数字
*
* @param numberStr
* @param regEx
* 正则表达式,可以为空
* @return
*/
public static boolean isNumber(String numberStr, String regEx) {
if (isEmpty(regEx))
regEx = NUMBER_REG;
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(numberStr);
return m.matches();
}
/**
* 是否是邮箱
*
* @param email
* 邮箱
* @param regEx
* 正则表达式,可以为空
* @return
*/
public static boolean isEmail(String email, String regEx) {
if (isEmpty(regEx))
regEx = EMAIL_REG;
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(email);
return m.matches();
}
/**
* 是否是手机号码
*
* @param mobile
* 手机号码
* @param regEx
* 正则表达式,可以为空
* @return
*/
public static boolean isMobileNO(String mobile, String regEx) {
if (isEmpty(regEx))
regEx = MOBILENO_REG;
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(mobile);
return m.matches();
}
/**
* 判断是否非空,忽略null和“”
*
* @param s
* @return
*/
public static boolean isEmpty(String s) {
if (s == null) {
return true;
} else if (s.equals("")) {
return true;
} else {
return false;
}
}
public static void main(String[] args) {
String ruleStr = "isEmail|Len(5,20)";
String mail = "test@163.com";
String desc = "测试";
// 解析规则
String result = ValidatorUtil.checkStr(mail, ruleStr, desc);
System.out.println(result);
// Matcher matcher = pattern.matcher(ruleStr);
// if (matcher.find()) {
// System.out.println(matcher.groupCount());
// // System.out.println(minLen);
// // int maxLen = Integer.parseInt(matcher.group(2));
// // System.out.println(maxLen);
// System.out.println(matcher.group(2));
// }
}
}
分享到:
相关推荐
### JAVA服务器端应用Socket线程池详解 #### 一、引言 在现代软件开发中,特别是对于服务器端的应用程序而言,高效的并发处理能力是非常重要的。为了提高系统的响应能力和资源利用率,很多Java开发者会选择使用...
适用于服务器端资源有限的场景。 - 双向心跳:客户端和服务器互相发送心跳,双向确认连接状态。这种方式更可靠,但对服务器资源消耗相对较大。 4. **HeartBeat心跳检测应用服务器 v2.0.1** - "HeartBeat心跳检测...
java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java.security.acl 此包中的类和接口已经被 java.security 包中的类取代。 java.security.cert 提供用于解析和管理...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
在广告行业中,高效的信息传递是至关重要的,而这通常涉及到客户端与服务器端的稳定通信。本文将深入探讨在“广告机项目”中,客户端与广告服务器端如何通过Socket进行有效通信,以及这一过程中的关键技术点。 首先...
Servlet是Java编写服务器端应用程序的标准接口,用于扩展服务器的功能;JSP则提供了方便的视图层处理,可以将业务逻辑和展示分离。 2. **Tomcat 服务器**:Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目...
这段Java源码的核心功能是创建一个TCP服务器,电脑作为服务器端,ESP8266作为客户端,两者通过TCP连接进行数据交换。以下是一些可能的关键代码片段: 1. **创建服务器端Socket**: ```java ServerSocket ...
5. 用户界面:虽然这是一款服务器端软件,但一个直观的管理界面可以方便运维人员查看监控状态、配置规则和处理报警。可以使用JavaFX或Swing等库来构建GUI,或者采用RESTful API与Web前端交互。 在实现阶段,我们...
4. yasca.php:此文件可能是Yasca的一个辅助组件,可能用于Web接口或者与PHP服务器端的交互。 5. yasca:可能是一个配置文件或者脚本,用于设置Yasca的运行参数或配置。 6. lib:这个目录包含了Yasca运行所需的库...
在Java编程中,有时我们需要设计一个程序来实现...在实际应用中,这种自动重启机制常用于服务器端服务,以确保服务的高可用性和稳定性。对于开发者来说,理解并熟练掌握上述知识点,对于构建健壮的后台系统至关重要。
启用HTTP响应头部的`X-XSS-Protection`可以开启浏览器内置的XSS防护机制,不过这只能提供基本防护,不能替代服务器端的过滤。 5. **Content Security Policy (CSP)**: CSP是一种安全策略,允许服务器指定哪些源...
在这个压缩包中,包含的是关于IEC 61850服务器端的详细配置文档,这些文档将帮助用户理解如何正确地设置和操作服务器端,以便与客户端进行有效通信。 首先,我们要理解IEC 61850的核心概念:变电站配置语言(SCL)...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...
总的来说,Java端口扫描器是一个实用的工具,它利用了Java的Socket API进行网络通信,有助于网络安全专业人士进行系统审计和漏洞检测。通过深入学习和实践,我们可以扩展它的功能,使其成为更强大的网络工具。
java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java.security.acl 此包中的类和接口已经被 java.security 包中的类取代。 java.security.cert 提供用于解析和管理证书...
4. **设置预览参数**:可以设置分辨率、帧率、编码格式等参数,以满足不同场景的需求。 5. **开始预览**:调用SDK的开始预览函数,将视频流数据传送到指定的显示窗口或设备。 6. **显示视频流**:这部分可能需要...
在Java中,Socket是网络通信的基础,它提供了应用程序与网络之间的连接通道,使得两个网络节点(通常是服务器和客户端)可以进行双向通信。 在设计一个基于Socket的文件传输服务时,主要涉及以下几个关键知识点: ...
java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了...
Java的Socket编程接口是构建网络通信的基础,通过TCP/IP协议,服务器端可以接收并处理来自客户端的监控请求。此外,Java的多线程能力使得系统可以同时处理多个并发连接,提高服务效率。 在系统设计上,通常会包含...