如何在 Angular 8 中使用 Pipe 将两个正则表达式组合成一个模式?
How can you combine two regular expressions in one pattern with Pipe in Angular 8?
我有 angular 8 个应用程序,我想用模式验证正确的 youtube url 和 vimeo url。还是管道?
所以我有这个:
<ng-container *ngIf="is('VideoDisplay')">
<iframe
*ngIf="videoUrl.value"
class="video-iframe"
type="text/html"
[src]="getVideoSafeUrl(videoUrl.value)"
frameborder="0"
allowfullscreen
></iframe>
<mat-form-field>
<input
matInput
type="url"
name="videoUrl"
ngModel
#videoUrl="ngModel"
placeholder="Url of video"
i18n-placeholder
pattern="^(http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+"
required
/>
<mat-error>
<app-element-edit-field-error
[errors]="videoUrl.errors"
></app-element-edit-field-error>
</mat-error>
</mat-form-field>
</ng-container>
但这仅适用于 youtube。但我也想将它与 Vimeo 电影结合起来。所以我有这个 vimeo 的正则表达式:
var re = /\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+)/i;
但是现在如何将这两者结合起来呢?并与管道一起使用?以便您可以在每个模板中使用它?
谢谢
所以我创建了一个这样的管道:
export class VideoUrlPipe implements PipeTransform {
transform(value: any, args?: any): any {
const vimeoReg = new RegExp(/\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+)/i);
const youtubeReg = ^(http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+;
return null;
}
}
我现在是这样的:
export class RegexConstants {
static readonly videoUrlsRegexConstant =
/((http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+)|(\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+))/g;
}
您正在组合这两个正则表达式。
最终正则表达式
re = /((http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+)|(\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+))/g
为了在每个模板中重复使用它,您可以制作一个常量文件并将该变量保存在那里。然后只需将它导入到您要使用它的地方。那里不需要管道。
export class regexConstants {
static readonly videoUrlsRegexConstant = /((http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?
(\.com)?\/.+)|(\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+))/g;
....
....
....
}
您也可以在此文件中定义其他正则表达式,并在您的应用程序的任何地方重复使用它。
import {regexConstants} from 'path/to/regexConstants';
re = regexConstants.videoUrlsRegexConstant;
html:
<mat-form-field>
<input
matInput
type="url"
name="videoUrl"
ngModel
#videoUrl="ngModel"
placeholder="Url of video"
i18n-placeholder
pattern="{{re}}"
required
/>
我有 angular 8 个应用程序,我想用模式验证正确的 youtube url 和 vimeo url。还是管道?
所以我有这个:
<ng-container *ngIf="is('VideoDisplay')">
<iframe
*ngIf="videoUrl.value"
class="video-iframe"
type="text/html"
[src]="getVideoSafeUrl(videoUrl.value)"
frameborder="0"
allowfullscreen
></iframe>
<mat-form-field>
<input
matInput
type="url"
name="videoUrl"
ngModel
#videoUrl="ngModel"
placeholder="Url of video"
i18n-placeholder
pattern="^(http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+"
required
/>
<mat-error>
<app-element-edit-field-error
[errors]="videoUrl.errors"
></app-element-edit-field-error>
</mat-error>
</mat-form-field>
</ng-container>
但这仅适用于 youtube。但我也想将它与 Vimeo 电影结合起来。所以我有这个 vimeo 的正则表达式:
var re = /\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+)/i;
但是现在如何将这两者结合起来呢?并与管道一起使用?以便您可以在每个模板中使用它?
谢谢
所以我创建了一个这样的管道:
export class VideoUrlPipe implements PipeTransform {
transform(value: any, args?: any): any {
const vimeoReg = new RegExp(/\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+)/i);
const youtubeReg = ^(http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+;
return null;
}
}
我现在是这样的:
export class RegexConstants {
static readonly videoUrlsRegexConstant =
/((http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+)|(\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+))/g;
}
您正在组合这两个正则表达式。 最终正则表达式
re = /((http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+)|(\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+))/g
为了在每个模板中重复使用它,您可以制作一个常量文件并将该变量保存在那里。然后只需将它导入到您要使用它的地方。那里不需要管道。
export class regexConstants {
static readonly videoUrlsRegexConstant = /((http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?
(\.com)?\/.+)|(\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+))/g;
....
....
....
}
您也可以在此文件中定义其他正则表达式,并在您的应用程序的任何地方重复使用它。
import {regexConstants} from 'path/to/regexConstants';
re = regexConstants.videoUrlsRegexConstant;
html:
<mat-form-field>
<input
matInput
type="url"
name="videoUrl"
ngModel
#videoUrl="ngModel"
placeholder="Url of video"
i18n-placeholder
pattern="{{re}}"
required
/>