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

如何在PHP中使用正则表达式验证特定含横杠数字字符串?

在PHP中验证特定数字横杠格式的字符串

要实现你需要的验证功能,咱们可以借助PHP的preg_match()函数,配合精准的正则表达式来匹配那两种模式。先明确下需要匹配的规则:

  • 模式A:3位数字 + 横杠 + 2位数字 + 横杠 + 3位数字(比如123-12-123,也就是你说的***-**-***)
  • 模式B:3位数字 + 横杠 + 1位数字(比如123-1)

正则表达式的构建

我们可以把两种模式用分支符|合并,还能提取共同部分优化写法:

^\d{3}-(?:\d{2}-\d{3}|\d{1})$
  • ^ 和 $:确保整个字符串完全匹配,不会出现包含目标格式的更长字符串被误判
  • \d{n}:匹配n个数字字符
  • (?:...):非捕获分组,把两个模式的差异部分包裹起来,避免生成不必要的捕获组,提升效率

PHP代码实现

我写了一个可复用的验证函数,附带测试用例供你参考:

function validateNumberWithDash($input) {
    // 定义验证正则
    $validationPattern = '/^\d{3}-(?:\d{2}-\d{3}|\d{1})$/';
    // preg_match返回1表示匹配成功,0失败,false正则错误
    return preg_match($validationPattern, $input) === 1;
}

// 测试不同场景
var_dump(validateNumberWithDash("123-12-123")); // bool(true) 符合模式A
var_dump(validateNumberWithDash("456-7"));      // bool(true) 符合模式B
var_dump(validateNumberWithDash("789-01-234")); // bool(true) 模式A的合法示例
var_dump(validateNumberWithDash("12-34-567"));  // bool(false) 开头不足3位数字
var_dump(validateNumberWithDash("1234-56-789"));// bool(false) 开头超过3位数字
var_dump(validateNumberWithDash("123-456"));    // bool(false) 中间部分不符合两种模式

补充说明

如果你需要允许字符串前后有空白字符(比如用户输入时不小心加了空格),可以在正则的开头和结尾加上\s*,修改后的正则为:

^\s*\d{3}-(?:\d{2}-\d{3}|\d{1})\s*$

这样就能兼容带前后空格的合法输入了。

内容的提问来源于stack exchange,提问作者Shoaib Quraishi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:47:38