Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
验证PHP中的预定义标记_Php - Fatal编程技术网

验证PHP中的预定义标记

验证PHP中的预定义标记,php,Php,我有一个功能,允许用户构建带有预定义标记的消息 这些是我目前唯一允许用户输入的标记,因此在PHP中应该验证这些标记是否属于这些标记之一 什么是最佳方式以及如何执行验证?使用preg_匹配 函数findTag($str,$replaceTag=[]){ 如果(!$str){ 返回false; } $end=strlen($str); $i=0; while($i)您希望执行哪种类型的验证?请共享您尝试过的代码?您的意思是不允许客户在其消息中包含文字括号吗?验证的目的是防止其他模式,例如{books

我有一个功能,允许用户构建带有预定义标记的消息

这些是我目前唯一允许用户输入的标记,因此在PHP中应该验证这些标记是否属于这些标记之一

什么是最佳方式以及如何执行验证?使用preg_匹配

函数findTag($str,$replaceTag=[]){
如果(!$str){
返回false;
}
$end=strlen($str);
$i=0;

while($i)您希望执行哪种类型的验证?请共享您尝试过的代码?您的意思是不允许客户在其消息中包含文字括号吗?验证的目的是防止其他模式,例如{books}在listExtract所有标记中明显不允许,例如使用regex
/\{\w+\}/
,然后遍历所有找到的标记并确认它们位于白名单标记中。
function findTag($str,$replaceTag = []){
    if(!$str){
        return false;
    }
    $end = strlen($str);
    $i=0;
    while($i<=$end){
        if(!isset($str[$i])){
            break;
        }
        //Find tag
        if($str[$i]=='{'){
            $tag = '';
            for($j=$i+1;$j<=$end;$j++){
                if($str[$j]=='}'){
                    break;
                }
                //Check nested tag {xyz{abc}efg}
                if($str[$j]=='{'){
                    return -1;//use nested tag
                }
                $tag.=$str[$j];
            }
            if(!isset($replaceTag[$tag])){
                return -2;//invalid tag you can skip or prevent string parsing
            }
            //Replace tag with value
            $str = substr_replace($str,$replaceTag[$tag],$i,$j);
            $i=$j;
        }
        $i++;
    }
    return $str;
}

$str = 'Customer name : {tag1}, thank you for your {tag{tag2}}';
$replaceTag = ['tag1'=>' tag 1 value'];
var_dump(findTag($str,$replaceTag));