模块解析失败:严格模式下的八进制文字

Mar*_*iah 1 regex angular

我正在使用 angular 7 并验证联系电话

"^(?!(\d)\1+$)(?:\(?\+\d{1,3}\)?[- ]?|0)?\d{10}$"
Run Code Online (Sandbox Code Playgroud)

正则表达式,但它抛出以下错误: Module parse failed: Octal literal in strict mode (10:76)

我已经尝试过\\而不是\因为根据我的发现问题出在\性格上。

registerForm = this.fb.group(
{
  email:['', [Validators.required, Validators.pattern('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+.com$')]],
  contact:['',[Validators.required, Validators.pattern('/^(?!(\d)\1+$)(?:\(?\+\d{1,3}\)?[- ]?|0)?\d{10}$/')]],
  password:['',[Validators.required]],
  confirmPassword:['',[Validators.required]]
},{ validator: PasswordMatchValidator });
Run Code Online (Sandbox Code Playgroud)

有什么方法可以替换\字符以使其工作吗?

msa*_*ord 5

这是一个XY 问题。每个人都在关注你原来的问题标题,它询问了\在正则表达式中转义文字。那不是问题。

首先,在 JavaScript 中,数字可以通过多种方式表示。其中之一是八进制文字表示法,通过在数字(字符代码)前加上\.

您的正则表达式包含\1被解释为八进制的,这是您的错误消息。八进制转义序列已被弃用,这就是 strictmode 抛出错误的原因,这是您面临的实际问题。

如果您通过转义\1as解决了编译错误\\1,则您生成了此表达式解析,它执行任何单个数字的负前瞻,后跟文字“\”字符,后跟数字“1”任意次数.

一个完全损坏的电话号码验证器的铁路图

您还会注意到区号括号是可选的,但它需要一个文字+(因为它被转义为\+)在左括号之后。那当然不是你想要的。

您想要的正则表达式可能是这个问题的答案之一

"^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$"
Run Code Online (Sandbox Code Playgroud)

其解析到这个

一个相当不错的电话号码验证器的铁路图

其次,Angular 的 PatternValidator将字符串转换为正则表达式,因此只需传入一个字符串而不用正斜杠将其括起来。