Java常用正则表达式速查表:从基础校验到完整符号指南

键盘旁的猫
键盘旁的猫
发布时间:2026-10-14| 6人浏览过
原创

本文汇总了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开发实战技巧的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。