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