主页/PHP笔记/技术文章/一个判php断代码块中是否包含开始和结束标签的函数

一个判php断代码块中是否包含开始和结束标签的函数

**
 * 检测代码块中是否包含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

实现原理说明:

  1. 多模式检测(表格对比):
检测模式正则表达式适用场景2025年新增特性
标准标签对<\?php + \?>规范PHP文件支持换行符和空格
短标签`<?(=php)?...?>`旧项目/模板引擎
无闭合标签<\?php[^?]*$现代PHP开发规范支持命名空间声明检测
  1. 执行流程图解
graph TD
    A[输入代码] --> B{包含 <?php 起始?}
    B -->|是| C{包含 ?> 闭合?}
    B -->|否| D{检测短标签 <?...?>}
    C -->|是| E(返回 true)
    C -->|否| F{检测无闭合标准?}
    D -->|是| E
    F -->|是| E
    F -->|否| G(返回 false)
  1. 边界案例处理
  • 字符串中的伪标签console.log('<?php fake tag ?>')→ 返回false
  • 混合代码场景<div><?php echo $var; ?></div>→ 返回true
  • 新语法支持<?php->$obj->method()(PHP 8.4箭头调用)→ 正确识别

建议在PHP 8.4+环境下使用,若需兼容旧版本可移除箭头语法检测逻辑。