如何防止在呈现页面后更改正则表达式字符?

时间:2018-02-06 10:32:36

标签: javascript regex angular typescript

我在搜索并尝试多次测试后陷入困境,但无法弄清楚如何解决以下问题。

我在regEx中使用这些字符\x3c\x3e\x22,并且保存在*.component.ts中的变量中,但是当我在标记/ HTML中使用该变量时,它将其转换为<>"。结果是我的模式没有按预期工作。

以下是对regex101.com的测试之一,您可以看到它的工作原理应该是:

^(?=.*[a-zA-Z\d!\x22#$%&\'()*+,.:;\x3c=\x3e?@[\]^_`{|}~/\\-])[A-Za-z\d!\x22#$%&\'()*+,.:;\x3c=\x3e?@[\]^_`{|}~/\\-]{8,50}$

如何防止这种情况并在呈现页面时保留原始字符?它是TypeScript或JavaScript浏览器引擎的行为还是什么?任何提示都会很棒。

1 个答案:

答案 0 :(得分:1)

首先,您需要使用双反斜杠将文字反斜杠引入正则表达式模式。即如果你将"\x22"写成字符串文字,那实际上只是"。因此,要在字符串文字中定义\x22,请写"\\x22"

然后,你有

^(?=.*[a-zA-Z\d!\x22#$%&\'()*+,.:;\x3c=\x3e?@[\]^_`{|}~/\\-])[A-Za-z\d!\x22#$%&\'()*+,.:;\x3c=\x3e?@[\]^_`{|}~/\\-]{8,50}$

这里的前瞻是多余的,因为它需要消费部分所需的同一组字符。可以删除前瞻,或者更好地替换为您需要的前瞻(?=[^A-Z]*[A-Z]),至少需要1个大写ASCII字母:

^(?=[^A-Z]*[A-Z])[A-Za-z\d!\x22#$%&\'()*+,.:;\x3c=\x3e?@[\]^_`{|}~/\\-]{8,50}$

作为字符串文字:

"^(?=[^A-Z]*[A-Z])[A-Za-z\\d!\\x22#$%&'()*+,.:;\\x3c=\\x3e?@[\\]^_`{|}~/\\\\-]{8,50}$"

请参阅regex demo