PHP - проверить шаблон усов

Как проверить строку шаблона усов в PHP? Например, если я прохожу

Hi {{#name}}{{name}}{{/name}}{{^name}}guest{{/name}}

и валидатор должен вернуть действительность, но если я пройду

Hi {{#name}}{{name}}{{/name}}{{^name}}guest

он должен вернуться недействительным.

Примечание Я бы предпочел, чтобы это было сделано полностью на PHP без Mustache_Engine или любой другой сторонней зависимости.


person Kousha    schedule 12.09.2016    source источник
comment
короткий ответ: напишите свой собственный Mustache Engine. (совет: проще и менее подвержено ошибкам просто использовать существующую библиотеку)   -  person Kaii    schedule 12.09.2016


Ответы (2)


Невозможно правильно проверить все допустимые шаблоны усов без создания парсера усов. Нет ярлыка регулярного выражения. Вам нужен настоящий парсер.

Если вы согласны с некоторыми ложноотрицательными (и некоторыми ложноположительными) результатами, вы можете создать что-то для проверки их подмножества. Или вы можете создать правильный парсер. Но лучше всего использовать mustache.php для его анализа, как указано в других ответах.

Почему вы пытаетесь сделать это без каких-либо зависимостей?

person bobthecow    schedule 13.09.2016

Просто скомпилируйте его:

function validate($template) {
    $m = new Mustache_Engine;
    try {
        $m->getParser()->parse($m->getTokenizer()->scan($template));
        $valid = true;
    } catch (Mustache_Exception_SyntaxException $e) {
        $valid = false;
    }
    return $valid;
}
person Alex Blex    schedule 12.09.2016
comment
Я обновлю свой комментарий, но я не хочу использовать другие пакеты. - person Kousha; 12.09.2016
comment
Затем, пожалуйста, обновите свой вопрос еще раз и покажите, что вы пробовали до сих пор. - person Alex Blex; 13.09.2016