我有一个输入(即文本框),允许用户输入令牌。
> Hello {{firstname}} {{lastname}}!
这些令牌一旦到达服务器就会被用户数据替换。我想实现一些保护方法,在输入提交之前“修复”输入。
因此,例如,应将以下内容修复/更改为{{firstname}}
我正在尝试这样的事情,但肯定不是最佳的并且容易出问题:
var properFirstName = "{{firstname}}";
var replaceValues = {
"firstname": properFirstName,
"{{first name}}": properFirstName,
"{firstname}": properFirstName
};
for (var txt in replaceValues) {
var rx = new RegExp(txt, "ig");
this.formData.message = this.formData.message.replace(rx, replaceValues[txt]);
}
我上面的示例失败了,故意指出一些问题(值最后有许多括号{{{{firstname}}}}以及每个模糊事件的更多内容)。所以这个标记和其他几个标记我需要一个更聪明的方法来评估像:
大写是没什么大不了的,我甚至可以改变服务器端方法来忽略大小写,但其余的我想在提交之前在客户端上解决。
除此之外,或许我需要在“名字”这样的事情上拨回保护措施......永远不知道什么时候有人会因为任何奇怪的原因故意输入它。也许搜索/更正总是在值周围存在至少一个花括号?我不希望我的保护性编程实际上是一个绊脚石。
答案 0 :(得分:1)
您可以使用以下解决方案:
var properFirstName = "{{firstname}}";
var replaceValues = /{*\s*first\s*name\s*}*/i;
var message = "{ \nfirst\tName}}";
message = message.replace(replaceValues, "{{firstname}}");
console.log(message);

模式为/{*\s*first\s*name\s*}*/i
,请参阅regex demo。
<强>详情
{*
- 0 + {
s \s*
- 0+ whitespaces first
- 文字子字符串\s*
- 0+ whitespaces name
- 文字子字符串\s*
- 0+ whitespaces }*
- 0 + }
s。