Ваш текущий шаблон соответствует тегам smarty, совпадает с открывающим и закрывающим тегами.Не уверен, что это так.
Если вы хотите проверить, есть ли между тегами smarty только адрес электронной почты, вы можете повторно использовать шаблон smarty, сопоставив шаблон smarty во входной строке, а затем заменив его напустой строки.Это оставит адрес электронной почты.
Тогда вы можете использовать проверку адреса электронной почты для проверки электронной почты.
Обратите внимание, что если у вас нет экранирования, все {}
.Ваш код может выглядеть следующим образом:
emailOrSmarty: function(v) {
var smartyPattern = /{{[^{}]+}}/g;
return this.smarty(v) || this.email(v.replace(smartyPattern, ""))
}
Я снова добавил этот шаблон, но вы можете переместить его в другое место, чтобы иметь возможность использовать его снова.
Если вы хотите проверитьлюбой из них, у вас уже есть 2 функции проверки.Для вашей функции вы можете использовать или для возврата, если любой из них равен true
emailOrSmarty: function (v) {
return this.smarty(v) || this.email(v);
},
Чтобы проверить последний шаблон smarty с {{$user.mail}}
, вы можете добавить:
smartyMailPattern: function(v) {
var pattern = /{{foreach[^{}]+}}{{\$user\.mail}}{{\/foreach}}/;
return pattern.test(v);
}