作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在搜索并尝试了几次测试后卡住了,但就是想不出如何解决以下问题。
我使用这些字符 \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 浏览器引擎的行为还是什么?任何提示都会很棒。
最佳答案
首先,您需要使用双反斜杠将文字反斜杠引入正则表达式模式。 IE。如果你把 "\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 .
关于javascript - 如何防止在呈现页面后更改正则表达式字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48640848/
我是一名优秀的程序员,十分优秀!