Java常用正则表达式速查表:从基础校验到完整符号指南
本文汇总了Java开发中高频使用的正则表达式集合,包括数字格式、字母组合、电子邮件、URL及身份证号校验等核心场景。文中不仅提供了可直接复用的正则模式,还结合了JavaScript示例展示了如何在网页表单中通过`onkeyup`和`replace`方法动态拦截非法输入。最后整理了正则表达式的关键元字符与语法规则,作为开发的案头参考。
常用数据格式校验正则
在日常业务逻辑中,数据合法性校验是基础需求。以下是针对不同数据类型整理的Java正则表达式字符串常量:
第1步:数字类输入校验
目的:限制用户仅输入符合特定规范的数值。
参数:n代表指定位数,m代表最小位数,m~n为区间。
- 只允许输入纯数字:
"^[0-9]*$" - 固定
n位数字:"^\d{n}$" - 至少
n位数字:"^\d{n,}$" - 位数在
m到n之间:"^\d{m,n}$" - 零或非零开头的正整数(含零):
"^(0|[1-9][0-9]*)$" - 非零正整数:
"^\+?[1-9][0-9]*$" - 非零负整数:
"^\-[1-9][0-9]*$" - 两位小数的正实数:
"^[0-9]+(.[0-9]{2})?$" - 1至3位小数的正实数:
"^[0-9]+(.[0-9]{1,3})?$"
第2步:字母与特殊字符校验
目的:控制字符串的长度、字符种类(如大小写混合)。
- 指定长度(如3位):
"^.{3}$" - 纯英文字母(区分大小写/大写/小写):
全部:"^[A-Za-z]+$"
大写:"^[A-Z]+$"
小写:"^[a-z]+$" - 字母与数字组合:
"^[A-Za-z0-9]+$" - 字母、数字与下划线组成:
"^\w+$" - 密码规则(以字母开头,6~18位,仅含字符数字下划线):
"^[a-zA-Z]\w{5,17}$" - 排除特定敏感字符(如
^%&',;=?$\等):"[^%&',;=?$\x22]+" - 仅包含汉字:
"^[\u4e00-\u9fa5]{0,}$"
第3步:复杂身份与信息格式校验
目的:验证具有标准格式的用户信息。
- Email地址:
"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$" - Internet URL:
"^http://%28[/\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$" - 电话号码(支持区号带括号或不带,如 XXX-XXXXXXX):
"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$" - 中国身份证号(15位或18位):
"^\d{15}|\d{18}$" - 月份校验(01~12):
"^(0?[1-9]|1[0-2])$" - 日期校验(01~31天):
"^((0?[1-9])|((1|2)[0-9])|30|31)$"
前端交互中的正则应用与提取
除了后端校验,在前端JavaScript中直接通过正则表达式限制用户输入体验更为流畅。以下场景展示了如何将正则应用于DOM事件。
第1步:限制文本框只能输入特定字符
目的:防止用户粘贴或手误输入不符合规范的字符,提供即时反馈。
操作:绑定 onkeyup 和 onbeforepaste 事件,使用 replace 替换掉非法字符。
- 限制中文:
onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))" - 限制全角字符:
onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))" - 限制数字:
onkeyup="value=value.replace(/[^\d]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" - 限制数字和英文:
onkeyup="value=value.replace(/[\W]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"注:此处原文建议用[\W]匹配所有非单词字符(即去掉数字和字母)。
第2步:从URL中提取文件名
目的:解析路径获取最后的文件名部分。
代码示例:
s = "https://www.jb51.net/about.htm";
s = s.replace(/(.*\/){0,}([^\.]+).*/ig, "$2");
// alert(s) 结果为 page1 (若URL结尾为page1.htm等)
第3步:字符串工具函数增强
目的:扩展原生String对象的方法,处理双字节字符长度和空行清洗。
- 计算字符串长度(双字节计2):
String.prototype.len = function(){ return this.replace(/[^\x00-\xff]/g,"aa").length; } - 去除首尾空格:
String.prototype.trim = function(){ return this.replace(/(^\s*)|(\s*$)/g,""); } - 匹配空行:
\n[\s| ]*\r - 匹配HTML标记:
<(.*)>.*<\/\1>|<(.*) \/>
第4步:IP地址的数值化转换
目的:将点分十进制IP转换为长整型数值(或用于比较)。以下提供两种思路:
方法一:使用正则捕获组
function IP2V(ip) {
re = /(\\d+)\.(\\d+)\.(\\d+)\.(\\d+)/g;
if (re.test(ip)) {
// 利用 RegExp.$1 ~ $4 获取分组
return RegExp.$1 * Math.pow(255,3) + RegExp.$2 * Math.pow(255,2) + RegExp.$3 * 255 + RegExp.$4 * 1;
} else {
throw new Error("Not a valid IP address!");
}
}
方法二:直接使用 split 拆分(更简单直观)
var ip = "10.100.20.168";
var parts = ip.split(".");
// 手动计算权值
var val = parseInt(parts[0]) * 255 * 255 * 255 + parseInt(parts[1]) * 255 * 255 + parseInt(parts[2]) * 255 + parseInt(parts[3]);
正则表达式符号释义手册
掌握符号含义是编写灵活正则的基础。以下为关键元字符的标准解释:
转义与定位符
\:转义字符。例如'\n'匹配换行,'\\'匹配反斜杠本身。^:匹配字符串开头。多行模式下也可匹配'\n'之后。$:匹配字符串结尾。多行模式下也可匹配'\r'之前。. (点):匹配除'\n'以外的任何单个字符。
量词(重复次数)
*:零次或多次。等价于{0,}。+:一次或多次。等价于{1,}。?:零次或一次。等价于{0,1}。{n}:恰好n次。{n,}:至少n次。{n,m}:次数在n到m之间。
注意:? 紧跟在其他量词后时(如 *?, +?, {n,}?),表示非贪婪匹配(尽可能少地匹配),默认行为为贪婪匹配(尽可能多地匹配)。
字符集合
[]:字符集。匹配包含在其中的任意一个字符,如[abc]匹配 'a'、'b' 或 'c'。[^ ...]:负值字符集。匹配不在其中的任意字符,如[^abc]匹配 'p'(在 'plain' 中)。[a-z]:范围。匹配 'a' 到 'z' 范围内的任意字符。(?:pattern):非获取匹配。匹配但不保存结果,用于组合选项,如industr(?:y|ies)。
预查(零宽断言)
(?=pattern):正向先行断言。只有当后面紧跟着pattern时才匹配当前位置,不消耗字符。例:Windows (?=95|98|NT)可匹配 Windows 2000 前的 Windows,但不会匹配 Windows 3.1。(?!pattern):负向先行断言。后面必须不跟pattern才匹配。
其他实用元字符
|:或。匹配 x 或 y。\b:单词边界。如'er\b'匹配 never 中的 er,不匹配 verb。\d:数字,等价于[0-9]。\D:非数字,等价于[^0-9]。\w:单词字符(字母、数字、下划线),等价于[A-Za-z0-9_]。\W:非单词字符。\s:空白字符(空格、制表符、换页符等)。\S:非空白字符。\n:向后引用。引用前面第 n 个捕获组的内容。\n(Unicode):匹配 Unicode 字符,如\u00A9。
以上就是Java正则表达式常用集合、应用场景及符号规则的详细内容,更多关于Java开发实战技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









