我正在使用 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)
有什么方法可以替换\字符以使其工作吗?
这是一个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将字符串转换为正则表达式,因此只需传入一个字符串而不用正斜杠将其括起来。
| 归档时间: |
|
| 查看次数: |
2886 次 |
| 最近记录: |