需要一种方法来根据令牌标准保护性地替换用户的输入

时间:2017-11-20 23:40:57

标签: javascript regex

我有一个输入(即文本框),允许用户输入令牌。

> Hello {{firstname}} {{lastname}}!

这些令牌一旦到达服务器就会被用户数据替换。我想实现一些保护方法,在输入提交之前“修复”输入。

因此,例如,应将以下内容修复/更改为{{firstname}}

  • {{名字}}
  • {姓}
  • {{姓}}
  • {{姓}}
  • {{first name}}
  • {{first name}}
  • 其他变化......

我正在尝试这样的事情,但肯定不是最佳的并且容易出问题:

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}}}}以及每个模糊事件的更多内容)。所以这个标记和其他几个标记我需要一个更聪明的方法来评估像:

  • 任何类似于“名字”标记的东西都缺少合适的支架?
  • 任何类似“名字”标记的内容都有空格或其他问题?

大写是没什么大不了的,我甚至可以改变服务器端方法来忽略大小写,但其余的我想在提交之前在客户端上解决。

除此之外,或许我需要在“名字”这样的事情上拨回保护措施......永远不知道什么时候有人会因为任何奇怪的原因故意输入它。也许搜索/更正总是在值周围存在至少一个花括号?我不希望我的保护性编程实际上是一个绊脚石。

1 个答案:

答案 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。