# 正则表达式测试工具

URL: https://caijiao.org/tool/regex-tester
Source: docs/tool/regex-tester.md
Description: 正则表达式在线测试工具，支持输入正则和测试文本，实时匹配结果展示，包含常用正则示例，便于校验数字、字符、邮箱、手机号等格式。

正则表达式在线测试工具，支持输入正则和测试文本，实时匹配结果展示，包含常用正则示例，便于校验数字、字符、邮箱、手机号等格式。



## 常用正则表达式

### 一、校验数字的表达式

<div class="table-responsive">
  <table class="table table-bordered table-striped table-hover">
    <thead class="thead-dark">
      <tr>
        <th>用途</th>
        <th>正则表达式</th>
        <th>示例</th>
        <th>说明</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>数字</td>
        <td class="regex-cell">^\d+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^\d+$"></i></td>
        <td>12345</td>
        <td>只允许非负整数（0或正整数）</td>
      </tr>
      <tr>
        <td>n位数字</td>
        <td class="regex-cell">^\d{n}$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^\d{n}$"></i></td>
        <td>1234 (n=4)</td>
        <td>恰好 n 位数字</td>
      </tr>
      <tr>
        <td>至少n位数字</td>
        <td class="regex-cell">^\d{n,}$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^\d{n,}$"></i></td>
        <td>12345 (n=3)</td>
        <td>至少 n 位数字</td>
      </tr>
      <tr>
        <td>m-n位数字</td>
        <td class="regex-cell">^\d{m,n}$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^\d{m,n}$"></i></td>
        <td>1234 (m=2,n=4)</td>
        <td>m 到 n 位数字</td>
      </tr>
      <tr>
        <td>零和非零开头数字</td>
        <td class="regex-cell">^(0|[1-9]\d*)$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^(0|[1-9]\d*)$"></i></td>
        <td>0, 123</td>
        <td>0 或非零开头的整数</td>
      </tr>
      <tr>
        <td>非零开头最多两位小数</td>
        <td class="regex-cell">^[1-9]\d*(\.\d{1,2})?$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[1-9]\d*(\.\d{1,2})?$"></i></td>
        <td>12.34</td>
        <td>正整数或带1-2位小数</td>
      </tr>
      <tr>
        <td>正负数带1-2位小数</td>
        <td class="regex-cell">^-?\d+(\.\d{1,2})?$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^-?\d+(\.\d{1,2})?$"></i></td>
        <td>-12.34, 56.7</td>
        <td>正负数，1-2位小数</td>
      </tr>
      <tr>
        <td>正数、负数、小数</td>
        <td class="regex-cell">^[-+]?\d+(\.\d+)?$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[-+]?\d+(\.\d+)?$"></i></td>
        <td>+12.3, -0.5</td>
        <td>正负整数或小数</td>
      </tr>
      <tr>
        <td>两位小数正实数</td>
        <td class="regex-cell">^\d+(\.\d{2})?$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^\d+(\.\d{2})?$"></i></td>
        <td>12, 12.34</td>
        <td>正整数或两位小数</td>
      </tr>
      <tr>
        <td>1~3位小数正实数</td>
        <td class="regex-cell">^\d+(\.\d{1,3})?$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^\d+(\.\d{1,3})?$"></i></td>
        <td>12.3, 12.345</td>
        <td>正整数或1-3位小数</td>
      </tr>
      <tr>
        <td>非零正整数</td>
        <td class="regex-cell">^[1-9]\d*$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[1-9]\d*$"></i></td>
        <td>123</td>
        <td>不含0的正整数</td>
      </tr>
      <tr>
        <td>非零负整数</td>
        <td class="regex-cell">^-[1-9]\d*$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^-[1-9]\d*$"></i></td>
        <td>-123</td>
        <td>不含0的负整数</td>
      </tr>
      <tr>
        <td>非负整数</td>
        <td class="regex-cell">^\d+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^\d+$"></i></td>
        <td>0, 123</td>
        <td>0或正整数</td>
      </tr>
      <tr>
        <td>非正整数</td>
        <td class="regex-cell">^(-\d+|0)$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^(-\d+|0)$"></i></td>
        <td>-123, 0</td>
        <td>0或负整数</td>
      </tr>
      <tr>
        <td>非负浮点数</td>
        <td class="regex-cell">^\d+(\.\d+)?$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^\d+(\.\d+)?$"></i></td>
        <td>0, 12.3</td>
        <td>0或正浮点数</td>
      </tr>
      <tr>
        <td>非正浮点数</td>
        <td class="regex-cell">^(-\d+(\.\d+)?|0+(\.0+)?)$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^(-\d+(\.\d+)?|0+(\.0+)?)$"></i></td>
        <td>-12.3, 0, 0.0</td>
        <td>0或负浮点数</td>
      </tr>
      <tr>
        <td>正浮点数</td>
        <td class="regex-cell">^(([1-9]\d*)|0)\.\d+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^(([1-9]\d*)|0)\.\d+$"></i></td>
        <td>0.1, 12.3</td>
        <td>大于0的浮点数</td>
      </tr>
      <tr>
        <td>负浮点数</td>
        <td class="regex-cell">^-(([1-9]\d*)|0)\.\d+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^-(([1-9]\d*)|0)\.\d+$"></i></td>
        <td>-0.1, -12.3</td>
        <td>小于0的浮点数</td>
      </tr>
      <tr>
        <td>浮点数</td>
        <td class="regex-cell">^-?\d+(\.\d+)?$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^-?\d+(\.\d+)?$"></i></td>
        <td>-12.3, 0, 45.6</td>
        <td>正负浮点数</td>
      </tr>
    </tbody>
  </table>
</div>

### 二、校验字符的表达式

<div class="table-responsive">
  <table class="table table-bordered table-striped table-hover">
    <thead class="thead-dark">
      <tr>
        <th>用途</th>
        <th>正则表达式</th>
        <th>示例</th>
        <th>说明</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>汉字</td>
        <td class="regex-cell">^[\u4e00-\u9fa5]+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[\u4e00-\u9fa5]+$"></i></td>
        <td>你好世界</td>
        <td>只允许汉字，长度至少1</td>
      </tr>
      <tr>
        <td>英文和数字</td>
        <td class="regex-cell">^[A-Za-z0-9]+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[A-Za-z0-9]+$"></i></td>
        <td>abc123</td>
        <td>只允许英文和数字</td>
      </tr>
      <tr>
        <td>4-40位英文和数字</td>
        <td class="regex-cell">^[A-Za-z0-9]{4,40}$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[A-Za-z0-9]{4,40}$"></i></td>
        <td>abc12345</td>
        <td>4-40位英文和数字</td>
      </tr>
      <tr>
        <td>长度为3-20的所有字符</td>
        <td class="regex-cell">^.{3,20}$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^.{3,20}$"></i></td>
        <td>abc, 12345678901234567890</td>
        <td>任意字符，3-20位</td>
      </tr>
      <tr>
        <td>26个英文字母</td>
        <td class="regex-cell">^[A-Za-z]+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[A-Za-z]+$"></i></td>
        <td>abcXYZ</td>
        <td>只允许大小写英文字母</td>
      </tr>
      <tr>
        <td>26个大写英文字母</td>
        <td class="regex-cell">^[A-Z]+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[A-Z]+$"></i></td>
        <td>ABCXYZ</td>
        <td>只允许大写英文字母</td>
      </tr>
      <tr>
        <td>26个小写英文字母</td>
        <td class="regex-cell">^[a-z]+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[a-z]+$"></i></td>
        <td>abcxyz</td>
        <td>只允许小写英文字母</td>
      </tr>
      <tr>
        <td>数字和26个英文字母</td>
        <td class="regex-cell">^[A-Za-z0-9]+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[A-Za-z0-9]+$"></i></td>
        <td>abc123</td>
        <td>只允许数字和英文字母</td>
      </tr>
      <tr>
        <td>数字、字母或下划线</td>
        <td class="regex-cell">^\w+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^\w+$"></i></td>
        <td>abc_123</td>
        <td>数字、字母或下划线</td>
      </tr>
      <tr>
        <td>3-20位数字、字母或下划线</td>
        <td class="regex-cell">^\w{3,20}$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^\w{3,20}$"></i></td>
        <td>abc_123</td>
        <td>3-20位数字、字母或下划线</td>
      </tr>
      <tr>
        <td>中文、英文、数字、下划线</td>
        <td class="regex-cell">^[\u4E00-\u9FA5A-Za-z0-9_]+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[\u4E00-\u9FA5A-Za-z0-9_]+$"></i></td>
        <td>你好abc_123</td>
        <td>允许中英文、数字、下划线</td>
      </tr>
      <tr>
        <td>中文、英文、数字（不含下划线）</td>
        <td class="regex-cell">^[\u4E00-\u9FA5A-Za-z0-9]+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[\u4E00-\u9FA5A-Za-z0-9]+$"></i></td>
        <td>你好abc123</td>
        <td>允许中英文、数字，不含下划线</td>
      </tr>
      <tr>
        <td>可输入除%&amp;',;=?$"等字符外的内容</td>
        <td class="regex-cell">^[^%&amp;',;=?$\x22]+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[^%&amp;',;=?$\x22]+$"></i></td>
        <td>abc123!@#</td>
        <td>不含%&amp;',;=?$"等字符</td>
      </tr>
      <tr>
        <td>禁止输入含有~的字符</td>
        <td class="regex-cell">^[^~]+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[^~]+$"></i></td>
        <td>abc123</td>
        <td>不含~字符</td>
      </tr>
    </tbody>
  </table>
</div>

### 三、特殊需求表达式

<div class="table-responsive">
  <table class="table table-bordered table-striped table-hover">
    <thead class="thead-dark">
      <tr>
        <th>用途</th>
        <th>正则表达式</th>
        <th>示例</th>
        <th>说明</th>
      </tr>
    </thead>
    <tbody>
      <tr><td>Email地址</td><td class="regex-cell">^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"></i></td><td>test@mail.com</td><td>常用邮箱格式</td></tr>
      <tr><td>域名</td><td class="regex-cell">[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?"></i></td><td>www.example.com</td><td>支持多级域名</td></tr>
      <tr><td>Internet URL</td><td class="regex-cell">^[a-zA-Z]+://[^\s]+$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[a-zA-Z]+://[^\s]+$"></i></td><td>https://abc.com</td><td>常用URL格式</td></tr>
      <tr><td>手机号码</td><td class="regex-cell">^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$"></i></td><td>13812345678</td><td>中国大陆手机号</td></tr>
      <tr><td>电话号码（区号-号码）</td><td class="regex-cell">^(\d{3,4}-)?\d{7,8}$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^(\d{3,4}-)?\d{7,8}$"></i></td><td>010-12345678</td><td>区号可选</td></tr>
      <tr><td>国内电话号码</td><td class="regex-cell">\d{3}-\d{8}|\d{4}-\d{7}<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="\d{3}-\d{8}|\d{4}-\d{7}"></i></td><td>021-12345678</td><td>常见座机格式</td></tr>
      <tr><td>支持分机号的电话</td><td class="regex-cell">((\d{11})|((\d{7,8})|(\d{3,4}-\d{7,8})|(\d{3,4}-\d{7,8}-\d{1,4})|(\d{7,8}-\d{1,4})))$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="((\d{11})|((\d{7,8})|(\d{3,4}-\d{7,8})|(\d{3,4}-\d{7,8}-\d{1,4})|(\d{7,8}-\d{1,4})))$"></i></td><td>010-12345678-123</td><td>支持分机号</td></tr>
      <tr><td>身份证号</td><td class="regex-cell">(^\d{15}$)|(^\d{18}$)|(^\d{17}[\dXx]$)<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="(^\d{15}$)|(^\d{18}$)|(^\d{17}[\dXx]$)"></i></td><td>110101199003071234</td><td>15/18位，末位可为X</td></tr>
      <tr><td>合法账号</td><td class="regex-cell">^[a-zA-Z][a-zA-Z0-9_]{4,15}$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[a-zA-Z][a-zA-Z0-9_]{4,15}$"></i></td><td>abc_123</td><td>字母开头，5-16位</td></tr>
      <tr><td>密码（字母开头，6-18位）</td><td class="regex-cell">^[a-zA-Z]\w{5,17}$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[a-zA-Z]\w{5,17}$"></i></td><td>a12345_</td><td>字母开头，6-18位</td></tr>
      <tr><td>强密码（无特殊字符）</td><td class="regex-cell">^[?=.*\d](?=.*[a-z)](?=.*[A-Z)](a-zA-Z0-9){8,10}$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[?=.*\d](?=.*[a-z)](?=.*[A-Z)](a-zA-Z0-9){8,10}$"></i></td><td>Abc12345</td><td>8-10位，含大小写字母和数字</td></tr>
      <tr><td>强密码（可含特殊字符）</td><td class="regex-cell">^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$"></i></td><td>Abc12345!</td><td>8-10位，含大小写字母、数字、特殊字符</td></tr>
      <tr><td>日期格式</td><td class="regex-cell">^\d{4}-\d{1,2}-\d{1,2}$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^\d{4}-\d{1,2}-\d{1,2}$"></i></td><td>2023-01-01</td><td>yyyy-mm-dd</td></tr>
      <tr><td>一年12个月</td><td class="regex-cell">^(0?[1-9]|1[0-2])$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^(0?[1-9]|1[0-2])$"></i></td><td>01, 12</td><td>01-12或1-12</td></tr>
      <tr><td>一个月31天</td><td class="regex-cell">^((0?[1-9])|([1|2](0-9))|30|31)$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^((0?[1-9])|([1|2](0-9))|30|31)$"></i></td><td>01, 31</td><td>01-31或1-31</td></tr>
      <tr><td>钱的输入（整数）</td><td class="regex-cell">^(0|[1-9][0-9]*)$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^(0|[1-9][0-9]*)$"></i></td><td>10000</td><td>非负整数</td></tr>
      <tr><td>钱的输入（可负数）</td><td class="regex-cell">^(0|-?[1-9][0-9]*)$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^(0|-?[1-9][0-9]*)$"></i></td><td>-10000</td><td>允许负数</td></tr>
      <tr><td>钱的输入（小数）</td><td class="regex-cell">^[0-9]+(\.[0-9]{1,2})?$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^[0-9]+(\.[0-9]{1,2})?$"></i></td><td>10000.00</td><td>最多两位小数</td></tr>
      <tr><td>钱的输入（带千分位）</td><td class="regex-cell">^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(\.[0-9]{1,2})?$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(\.[0-9]{1,2})?$"></i></td><td>10,000.00</td><td>千分位支持</td></tr>
      <tr><td>xml文件</td><td class="regex-cell">^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[xX][mM][lL]$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[xX][mM][lL]$"></i></td><td>test-1.xml</td><td>xml文件名</td></tr>
      <tr><td>中文字符</td><td class="regex-cell">[\u4e00-\u9fa5]<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="[\u4e00-\u9fa5]"></i></td><td>汉</td><td>单个中文字符</td></tr>
      <tr><td>双字节字符</td><td class="regex-cell">[^\x00-\xff]<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="[^\x00-\xff]"></i></td><td>汉字，日文</td><td>非ASCII字符</td></tr>
      <tr><td>空白行</td><td class="regex-cell">^\s*$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^\s*$"></i></td><td>（空行）</td><td>匹配空白行</td></tr>
      <tr><td>HTML标记</td><td class="regex-cell">&lt;[^&gt;]+&gt;<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="<[^>]+>"></i></td><td>&lt;div&gt;</td><td>简单HTML标签</td></tr>
      <tr><td>首尾空白字符</td><td class="regex-cell">^\s*|\s*$<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="^\s*|\s*$"></i></td><td>  abc  </td><td>去除首尾空白</td></tr>
      <tr><td>腾讯QQ号</td><td class="regex-cell">[1-9][0-9]{4,}<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="[1-9][0-9]{4,}"></i></td><td>10000</td><td>5位及以上数字</td></tr>
      <tr><td>中国邮政编码</td><td class="regex-cell">[1-9]\d{5}(?!\d)<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="[1-9]\d{5}(?!\d)"></i></td><td>100000</td><td>6位数字</td></tr>
      <tr><td>IPv4地址</td><td class="regex-cell">((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}<i class="fas fa-copy copy-btn ms-2" data-clipboard-text="((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}"></i></td><td>192.168.1.1</td><td>IPv4格式</td></tr>
    </tbody>
  </table>
</div>
