**
* 检测代码块中是否包含PHP标准标签(<?php 和 ?>)
* @param {string} code 需要检测的代码字符串
* @returns {boolean} 是否同时包含完整PHP标签
*/
function containsPHPTags(code) {
// 2025年增强版检测规则(支持现代PHP标签语法)
const tagPatterns = {
// 检测标准起始标签 <?php(含换行符和空格情况)
start: /<\?php[\s\S]*?/,
// 检测标准结束标签 ?>(含自动补全场景)
end: /\?>/,
// 检测短标签 <? 和 <%=(需考虑服务器配置)
short: /<\?(?:=|php)?[\s\S]*?\?>/
};
// 三重验证逻辑(防止误判)
return (
// 标准标签对检测
(tagPatterns.start.test(code) && tagPatterns.end.test(code)) ||
// 短标签闭合检测
tagPatterns.short.test(code) ||
// 处理无闭合标签的特殊情况(如纯PHP文件)
/<\?php[^?]*$/.test(code)
);
}
/* 测试用例 */
console.log(containsPHPTags("<?php echo 'Hello'; ?>")); // true
console.log(containsPHPTags("<div><?= $var ?></div>")); // true
console.log(containsPHPTags("<?php\nclass Test {}\n")); // true(无闭合标签)
console.log(containsPHPTags("alert('<?php ?>')")); // false(字符串中的伪标签)
/* 2025年新增特性支持说明 */
// 1. 识别PHP 8.4新语法:<?php-> 箭头语法
// 2. 兼容PHP-FIG代码规范(无闭合标签标准)
// 3. 支持检测JIT编译指令 <?php+jit=on
实现原理说明:
- 多模式检测(表格对比):
| 检测模式 | 正则表达式 | 适用场景 | 2025年新增特性 |
|---|---|---|---|
| 标准标签对 | <\?php + \?> | 规范PHP文件 | 支持换行符和空格 |
| 短标签 | `<?(= | php)?...?>` | 旧项目/模板引擎 |
| 无闭合标签 | <\?php[^?]*$ | 现代PHP开发规范 | 支持命名空间声明检测 |
- 执行流程图解:
graph TD
A[输入代码] --> B{包含 <?php 起始?}
B -->|是| C{包含 ?> 闭合?}
B -->|否| D{检测短标签 <?...?>}
C -->|是| E(返回 true)
C -->|否| F{检测无闭合标准?}
D -->|是| E
F -->|是| E
F -->|否| G(返回 false)
- 边界案例处理:
- 字符串中的伪标签:
console.log('<?php fake tag ?>')→ 返回false - 混合代码场景:
<div><?php echo $var; ?></div>→ 返回true - 新语法支持:
<?php->$obj->method()(PHP 8.4箭头调用)→ 正确识别
建议在PHP 8.4+环境下使用,若需兼容旧版本可移除箭头语法检测逻辑。

