PHP正则验证字符串仅含合法字符且可选中间包含=>的问题
PHP数组项名称校验正则实现
最终符合要求的正则表达式
/^[a-zA-Z0-9_\-]+(?:=>[a-zA-Z0-9_\-]+)*$/
正则规则对应说明
- 开头强制匹配1个及以上基础允许字符(大小写英文字母、数字、下划线、连字符),直接规避了
=>开头的问题 - 后续仅允许出现「
=>+ 1个及以上基础允许字符」的重复组合,既保证=>只能作为完整字符串出现、不会单独存在=或>,也保证了不会以=>结尾 - 全程无额外冗余判断,执行效率更高
完整测试代码
<?php $regex = '/^[a-zA-Z0-9_\-]+(?:=>[a-zA-Z0-9_\-]+)*$/'; // 覆盖所有场景的测试用例 $testList = [ 'Field_name_true2', // 合法 无=> 'Field=>Value-True', // 合法 包含一次=> 'Field=>Value=>Test', // 合法 包含多次=> '=>False_name', // 非法 以=>开头 'Bad_name_2=>', // 非法 以=>结尾 'Test=Single', // 非法 单独出现= 'Test>Single' // 非法 单独出现> ]; foreach ($testList as $item) { $matchResult = preg_match($regex, $item) ? 'true' : 'false'; echo "校验内容:{$item} → 校验结果:{$matchResult}\n"; } ?>
输出结果
校验内容:Field_name_true2 → 校验结果:true 校验内容:Field=>Value-True → 校验结果:true 校验内容:Field=>Value=>Test → 校验结果:true 校验内容:=>False_name → 校验结果:false 校验内容:Bad_name_2=> → 校验结果:false 校验内容:Test=Single → 校验结果:false 校验内容:Test>Single → 校验结果:false
内容的提问来源于stack exchange,提问作者Shane
相关产品推荐
相关产品推荐

