Проверить URL

В настоящее время я использую Angular 5. Я попытался проверить URL-адрес следующим образом:

HTML:

<div class = "form-group col-sm-6">
  <input formControlName = "s_url" type = "url" class = "form-control" id = "kk" placeholder = "url">
  <error-display [displayError] = "isValid('s_url')" errMsg = "This field is required!"></error-display>
</div>

В файле validate.ts у меня есть такой шаблон:

s_url: new FormControl('', [
  Validators.required,
  Validators.pattern("/^(http[s]?://){0,1}(www\.){0,1}[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,5}[\.]{0,1}/")
]),

Но с шаблоном сообщение об ошибке отображается даже при вводе правильного URL-адреса.

когда вы передаете регулярное выражение в качестве параметра для Validators.pattern (regex), вам необходимо убрать обратную косую черту. В вашем примере это должно выглядеть так: ^ (http [s]?: \\ / \\ /) {0,1} (www \\.) {0,1} [a-zA-Z0 -9 \\. \\ -] + \\. [A-‌ zA-Z] {2,5} [\\.] {0,1} ‌. Регулярное выражение, которое я использую для URL-адресов, выглядит так: Validators.pattern ("^ (https | ftp | http | ftps): \\ / \\ / ([az \\ d _] + ‌ \\.)? (([ a-zA-Z \\ d _] + ‌) (\\. [a-zA-Z] {2,6})) ‌ (\\ / [a-zA-Z \\ d _ \\% \ \ ‌ - = \\ +] +) * (\\?)? ([A-z‌ AZ \\ d = _ \\ + \\% \\ - & \\ ‌ {\\} \\ :] +)? ")

LH7 22.08.2020 05:00
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
16
1
39 391
6

Ответы 6

Вы можете попробовать этот способ, немного изменив и разделив ваше регулярное выражение:

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

По моему собственному опыту, кавычки (") и косые черты (/) иногда могут вызывать проблемы с регулярным выражением при передаче непосредственно в .pattern().


Вот рабочий Демо

Он не проверяет URL-адреса с помощью параметров запроса, таких как http://demosite.com/#/admin/project/project-details?id=34.

Faizan Saiyed 17.06.2019 12:09

Это не было предметом консультации. Откройте новую тему.

edu 21.09.2019 13:59

Я рекомендую следовать регулярному выражению, более полному (включая URL-адреса с параметрами запроса) var URL_REGEXP = /^[A-Za-z][A-Za-z\d.+-]*:/*(?:\w+(?::\w+)?@)?[^\s/]+(?::\d+‌​)?(?:/[\w#!:.?+=&%@‌​\-/]*)?$/;, скопированный из исходного кода angularjs (github.com/angular/angular.js/commit/…)

Victor Dias 22.10.2019 02:52

Я просто попробовал случайный URL-адрес из изображений Google, кажется, ваше решение недействительно, например snopes.com/tachyon/2020/03/ss_corona_beer.jpg?resize=865,452

Reza 28.03.2020 02:24

Пример @VictorDias работает и для IP-адресов. Бывший. 102.25.36.24

Sameera K 14.05.2020 19:45

В зависимости от ваших требований, например, если вы не хотите иметь дело с \ поддерживать RegExp для URL-адреса, вы можете делегировать работу встроенному в браузер средству проверки формы.

Это могло быть реализовано так:

const control: HTMLInputElement = document.createElement("input");
control.type = "url";
control.value = value;
const isValid: boolean = control.checkValidity();

Используйте этот простой подход ..

установить эту библиотеку.

npm install ng2-validation --save

Не забывайте вводить это. В вашем app.module.ts импортируйте это в свой массив импорта

import { CustomFormsModule } from 'ng2-validation'

И в вашем массиве импорта

imports: [BrowserModule, FormsModule, CustomFormsModule],

Затем измените свой код, как показано ниже

<div class = "form-group col-sm-6">
  <input formControlName = "s_url" type = "url" class = "form-control" id = "kk" url placeholder = "url">

  <div *ngIf = "imageUrl.touched && imageUrl.invalid" >
     <div *ngIf = "imageUrl.errors.required"> This field is required!</div>
     <div *ngIf = "imageUrl.errors.url"> invalid URL </div>
  </div>

</div>

Я думаю, что это регулярное выражение более полное:

const urlRegex = /^(?:http(s)?://)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/;
this.form = this.fb.group({
      s_url: ['', [Validators.required, Validators.pattern(urlRegex)]],
    });

Пожалуйста, проверьте образец здесь

% - допустимый символ и часто используется с закодированной строкой, содержащей специальные символы. Регулярное выражение было бы лучше как /^(?:http(s)?://)?[\w.-pting+(?:\.[\w\.-pting+)+[\w\- \ ._ ~: /?% # [‌ 3; @! \ $ & '() * \ ‌ +,; =.] + $ /
hellimac 17.05.2020 18:16

Это не работает с символами Юникода, такими как ü и ä, которые в настоящее время поддерживаются в доменных именах.

Martin Sotirov 14.09.2020 16:30

Вы также можете использовать URL API, который на момент написания этого ответа поддерживался 95%. См. Поддержку браузера здесь

urlValidator: ValidatorFn = (control: AbstractControl) => {
    let validUrl = true;

    try {
      new URL(control.value)
    } catch {
      validUrl = false;
    }

    return validUrl ? null : { invalidUrl: true };
  }

  searchControl = this.fb.control(null, this.urlValidator);

Похоже, что при этом вообще не принимаются во внимание протоколы.

James Parker 01.02.2021 23:03

http: eca.com укажите мне действительный URL

AFetter 04.02.2021 11:31

@JamesParker Что ты имеешь в виду? Не могли бы вы привести пример того, что вы считаете недействительным URL-адресом, который возвращается как действительный? Спасибо

realappie 02.05.2021 16:09

используйте это регулярное выражение /^(http[s provided?://){0,1}(www.){0,1}[a-zA-Z0-9.- provided+.[a-zA-Z ]{2,5 } [.] {0,1} /

он работает со всеми типами URL

Почему «www». там жестко запрограммированы? Даже URL-адрес этой страницы не содержит www. :-( stackoverflow.com/questions/50508712/validate-an-url

MarkusSchaber 10.05.2021 08:28

Другие вопросы по теме