如何在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
相关产品推荐
相关产品推荐

