You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则条件分组实现:按第二组存在与否限制第一组长度(PHP服务端校验)

带条件规则的PHP服务端校验正则实现方案

最终可用正则

/^(?:\d{6}-\d{5}|\d{8}|\d{11}|\d{13})$/

规则说明

正则采用分支互斥逻辑覆盖两种合法场景,同时加首尾锚定避免局部匹配:

  • ^、$分别锚定字符串开头和结尾,要求整个字符串完全符合规则
  • 非捕获组(?:)内的分支用|分隔,满足任意一个分支即为合法:
    • 分支1 \d{6}-\d{5}:匹配带横杠的场景,严格要求第一组6位数字、第二组5位数字,中间用横杠分隔
    • 分支2-4 \d{8}|\d{11}|\d{13}:匹配不带横杠的纯数字场景,仅允许长度为8、11、13位

原有正则问题说明

你之前编写的([0-9]{6,})(-?)(([0-9]{5})?)+存在3个核心缺陷:

  • 无首尾锚定,只要字符串局部符合规则就会判定为匹配
  • 第一组用{6,}无上限长度限制,没有区分有无横杠的场景
  • 横杠和第二组均标记为可选,未做两种场景的互斥限制,导致大量非法用例被放过

PHP使用示例

$checkPattern = '/^(?:\d{6}-\d{5}|\d{8}|\d{11}|\d{13})$/';
$inputStr = '要校验的字符串';
if (preg_match($checkPattern, $inputStr)) {
    // 校验通过的业务逻辑
} else {
    // 校验失败的提示逻辑
}

内容的提问来源于stack exchange,提问作者Max Krizh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:48:03