【问题标题】:How to prevent regex characters from being changed after page is rendered?如何防止在页面呈现后更改正则表达式字符?
【发布时间】:2018-02-06 10:32:35
【问题描述】:

我在搜索并尝试了几个测试后被卡住了,但就是不知道如何解决以下问题。

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

这是对regex101.com 的测试之一,正如您所见,它可以正常工作:

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

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

【问题讨论】:

  • 尝试将反斜杠加倍。
  • 添加到 @WiktorStribiżew ,以 /pattern+/g 结尾?
  • 我尝试将其用作:/\x3c,输出为:\/\x3c 却错了。我只需要:\x3c 也在这里阅读了doc
  • @k.vincent 使用代码更新您的问题,包括您在做什么、模式是什么以及您想要什么。在 js 中,您需要对模式进行双重转义,并以我上面显示的 +/g 结束它。
  • @之后,请使用用户名通知我或其他人您的反馈。请与正则表达式共享 regex101 的链接。我相信您现在只需在^ 之后添加(?=[^A-Z]*[A-Z])

标签: javascript regex angular typescript


【解决方案1】:

首先,您需要使用双反斜杠将文字反斜杠引入正则表达式模式。 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

【讨论】:

    猜你喜欢
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    相关资源
    最近更新 更多