Для определенного механизма шаблонов, где пользователь будет добавлять / обновлять шаблоны для отправки сообщений клиентам.
Я использую регулярные выражения для проверки каждого литерала шаблона, имеющего двойные теги, начальный <<
и закрывающий тег >>
в строке.
Дан действительный шаблонизатор.
Hi <<cName>>, please make your payment of $ <<totAmt>>
for Account number <<accNum>> given by <<agentName>> at this link <<payLink>>
The validity of this link is 30 minutes.
Даны valid
литералов шаблона
<<cName>>
<<totAmt>>
<<accNum>>
<<agentName>>
<<payLink>>
Дано invalid
литералов шаблона
<<cName>
<<agentName>>>>>>>>
<cName>
<<<<<payLink>>
<<cName<<>>
В настоящее время мой обходной путь - дать.
Сначала я получаю все литералы шаблонов, используя данное регулярное выражение.
<. *?> (?!>)
Затем выполните цикл по всем литералам для проверки с использованием заданного Regex в PHP. Если какой-либо литерал недопустим, значит, данный шаблон, обновленный пользователем, недействителен.
^ <{2} [^ <>] +> {2} (?!>)
$is_tpl_valid = true; //template is valid
$template = 'Hi <<cName>>, please make your payment of $ <<totAmt>>
for Account number <<accNum>> given by <agentName>> at this link <<payLink>>
The validity of this link is 30 minutes.';
echo '<br/> --- File: ' . __FILE__ . '#'. __LINE__ . '------- $template -> ' . $template . ' --------------<br/>';
if(preg_match_all('#<.*?>(?!>)#', $template, $matched))
{
echo '<pre>';
print_r($matched);
foreach($matched[0] as $item)
{
if($is_tpl_valid && !preg_match('#^<{2}[^<>]+>{2}(?!>)#', $item))
{
echo '<br/> --- File: ' . __FILE__ . '#'. __LINE__ . '------- $item -> ' . $item . ' --------------<br/>';
$is_tpl_valid = false; //template is invalid
}
}
}
Можем ли мы сделать это в одном Regex или в другом лучшем решении (в JS / PHP), чтобы найти недопустимые литералы шаблона.
Заранее спасибо