Как определить URL в текстовой области и проверить его?

#javascript #angular

#javascript #angular

Вопрос:

Как определить (в текстовой области), присутствует ли какой-либо URL в значении текстовой области? Я захочу определять URL-адреса по всей записи, например, проверять слово, которое было введено после каждого пробела, или если я вставляю что-либо в текстовую область.

Также могу ли я проверить, является ли это допустимым URL. Потому что, если он действителен, я выполню вызов API на основе этого действительного URL.

Заранее благодарю вас.

 <textarea (keyup)=onKeyUp($event) [(ngModel)]="textval" (paste)="onPaste($event)"></textarea>

onKeyUp(event){
  //check if any url present in value on key up
}


onPaste(event : any){
  ////check if any url present in value if pasting anything
}
  

Ответ №1:

Вы можете использовать Router для получения URL-адреса и сопоставления его с переменной ngModel textval и проверки шаблона, если это допустимый ввод, затем вы отправляете его. Вот как вы используете маршрутизатор в своем компоненте и проверке шаблона

 textval: any;

constructor(private currentRoute: Router) { }

ngOnInit() {
this.textval = this.currentRoute.url;
}
  

Регулярное выражение для проверки действительного URL-адреса (это один из примеров, который вы можете изменить в зависимости от ваших требований)

 /^(?:http(s)?://)?[w.-] (?:.[w.-] ) [w-._~:/?#[]@!$amp;'()* ,;=.] $/;
  

Используйте это в текстовой области

 <textarea [pattern]="/^(?:http(s)?://)?[w.-] (?:.[w.-] ) [w-._~:/?#[]@!$amp;'()* ,;=.] $/" (keyup)=onKeyUp($event) [(ngModel)]="textval" (paste)="onPaste($event)"></textarea>
  

Ответ №2:

Если вы используете реактивные формы из angular, вы можете добавить регулярное выражение в качестве средства проверки

 const reg = '(https?://)?([\da-z.-] )\.([a-z.]{2,6})[/\w .-]*/?';

this.form = fb.group({

  url: ['', [Validators.required, Validators.pattern(reg)]]

})