在 ng-pattern 中绕过 ^ 和 $ 的默认包装

Bypass default wrapping of ^and $ in ng-pattern

我从 API 获取我的正则表达式,它们通常以 ^ 开头并以 $ 结尾(例如 ^-?[0-9]+$)。只需将正则表达式作为字符串放入 ng-pattern 就会得到 Lexer Error,因为 angular 默认情况下会在字符串上添加 ^ 和 $。

来自Angular API reference

  • If the expression evaluates to a RegExp object, then this is used directly.
  • If the expression evaluates to a string, then it will be converted to a RegExp after wrapping it in ^ and $ characters. For instance, "abc" will be converted to new RegExp('^abc$').

那么好吧,让我们尝试将正则表达式字符串转换为正则表达式对象,我想。所以我尝试了这个:

json.data.data[i].validateRegex = new RegExp(json.data.data[i].validateRegex, "g");

但它导致了另一个错误:

Error: ngPattern:noregexp
Expected Regular Expression
Expected {} to be a RegExp but was {}.

如何让我的正则表达式与 ng-pattern 一起工作?最好不要从正则表达式中删除 ^ 和 $。

将字符串转换为正则表达式对象有效。

但是 ng-pattern 中不应该有 {{ }}。将它从 ng-pattern="{{ regexObj }}" 更改为 ng-pattern="regexObj" 就成功了!