如何编写preg_match用regex实现1-80及后接+^的输入校验
适配需求的preg_match正则表达式
你原来编写的[0-7][0-9]|80只覆盖了两位数的匹配场景,没有适配1-9的个位数情况,所以无法匹配个位数输入。
符合你需求的完整正则如下:
/^(?:[1-9]|[1-7][0-9]|80)[+^]?$/
规则拆解说明
^和$:锚定字符串首尾,保证输入内容整体符合规则,不会出现前后夹带多余字符的问题,适配preg_match全量校验的使用场景(?:[1-9]|[1-7][0-9]|80):非捕获分组,精准匹配1-80区间内的整数:[1-9]覆盖1到9的个位数输入场景[1-7][0-9]覆盖10到79的两位数输入场景80单独匹配上限值80
[+^]?:匹配可选的后缀符号,?表示后缀最多出现1次,也可以不出现,完全符合你要求的可追加+或^的规则
校验效果参考
合法输入示例:
3、27、80、79+、1^、80^
非法输入示例:0、81、100、12a、5++、+23
实际使用示例
$checkPattern = '/^(?:[1-9]|[1-7][0-9]|80)[+^]?$/'; $inputContent = '61^'; if (preg_match($checkPattern, $inputContent)) { echo "输入符合规则"; } else { echo "输入不符合规则"; }
内容的提问来源于stack exchange,提问作者Marv
相关产品推荐
相关产品推荐

