在Ionic中使用Regex验证URL
我正在开发一个Ionic应用程序,并试图创建一个正则表达式来匹配某个表单验证的网站URL。下面是我正在使用的正则表达式:在Ionic中使用Regex验证URL,regex,forms,ionic-framework,Regex,Forms,Ionic Framework,我正在开发一个Ionic应用程序,并试图创建一个正则表达式来匹配某个表单验证的网站URL。下面是我正在使用的正则表达式: ^((http | ftp | https):\/\/)([\w-]+(?:(?:\.[\w-]+)))([\w,@?^=%&:\/~+\-]*[\w@?^=%&\/+-])?$ 虽然我知道这不是一个验证URL的“完美”正则表达式,但我发现在ionic和我的web测试中使用正则表达式是不一致的 例如,我将同一个正则表达式插入到中,有几个示例运行良好: 然而,当我运行我的
^((http | ftp | https):\/\/)([\w-]+(?:(?:\.[\w-]+)))([\w,@?^=%&:\/~+\-]*[\w@?^=%&\/+-])?$
虽然我知道这不是一个验证URL的“完美”正则表达式,但我发现在ionic和我的web测试中使用正则表达式是不一致的
例如,我将同一个正则表达式插入到中,有几个示例运行良好:
然而,当我运行我的ionic应用程序时,没有一个模式匹配
我知道我正确地使用了Validators.pattern()
,因为我已经为电子邮件输入添加了一个regex验证器。我还知道我正确地使用了它,因为我能够插入简单的正则表达式模式,比如http
,并且验证工作正常
在某种程度上,离子模式无法像普通正则表达式那样解析。也许我的模式使用的是爱奥尼亚无法识别或解析的字符
在Ionic中使用regex有什么我不知道的吗
下面是我如何设置各种表单控件的验证。请注意,organizerEmail的模式正在运行
let formGroup: FormGroup = this.formBuilder.group({
title: ['', Validators.required],
venue: ['', Validators.required],
streetAddress: ['', Validators.required],
city: ['', Validators.required],
zipCode: ['', Validators.required],
price: [''],
description: ['', Validators.compose([Validators.maxLength(this.descriptionMax), Validators.required])],
eventUrl: ['', Validators.compose([Validators.pattern('^((http|ftp|https):\/\/)?([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?$'), Validators.required])],
contactName: ['', Validators.required],
organizerEmail: ['', Validators.compose([Validators.pattern('^[a-zA-Z0-9._]+[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$'), Validators.required])],
phoneNumber: [''],
});
以下是使用表单控件的HTML输入:
<ion-item>
<ion-label stacked color="light">Website</ion-label>
<ion-input formControlName="eventUrl" type="url" placeholder="Website"></ion-input>
</ion-item>
网站
您可以通过转义反斜杠来修复模式,也可以删除由引擎隐式添加的锚定。您还可以删除不必要的组
使用
这是你的电话号码
电子邮件检查正则表达式也必须正确退出
:
Validators.pattern('[a-zA-Z0-9._]+[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}')
请注意,organizerEmail的模式正在运行。-它不能正常工作。再次转义所有
\
。将\/
替换为/
。删除^
和$
。例如,Validators.pattern('^((http | ftp | https):/)([\\w-]+(?:(?:\.[\\w-]+)+)([\\w,@?^=%&:/+-]*[\\w@?^=%&/++-])
只需几句注释:https?
匹配http
和https
,更快、更短。令牌\w
包含\u
,因此您无需将其添加到字符类。@WiktorStribiżew完成了它!我缺少的是反斜杠。你是否将Regex101 regex类型设置为Javascript?@WiktorStribiżew如果你想提交答案,我会选择它。谢谢你!加一
Validators.pattern('[a-zA-Z0-9._]+[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}')