7
votes

Valider l'URL avec ou sans protocole

Bonjour, je souhaite valider ces URL suivantes, ils passeraient donc tous avec ou sans partie HTTP / www, tant qu'il existe du TLD présent comme .com, .net, .org, etc..

valide Les URL devraient être: xxx

pour supporter de longues TLDS: xxx

pour supporter les tirets (-): xxx

aussi pour supporter les nombres dans les domaines: xxx

peut également permettre à IPS: xxx

(mais c'est extra!)

Agitez également les tirets (-), j'ai oublié de mantion que =)

J'ai trouvé de nombreuses fonctions qui valident l'une ou l'autre mais pas les deux en même temps. Si quelqu'un connaît une bonne regex pour cela, veuillez partager. Merci pour votre aide.


5 commentaires

@Amadan, bien regex partie :) Vous ne savez pas comment écrire un pour accéder à tous ces domaines.


filtre_validate_url ?


@CHARDLES, cela ne permet que http: // et www si vous ne tapez pas ceux dans, il ne passera pas.


@TUX, la documentation n'est pas d'accord, sauf si vous avez testé it.


Filtrer_validate_url échouera si vous ne fournissez pas le protocole, ne prend pas en charge les domaines internationalisés (uniquement ASCII) et d'autres protocoles tels que Mailto, SSH, etc.


4 Réponses :


1
votes

Lorsque vous ignorez la partie de chemin et recherchez uniquement la partie de domaine, une règle simple serait xxx pré>

si vous souhaitez prendre en charge le pays TLDS, vous devez également fournir une complète (actuelle ) Liste ou ajouter | .. code> à la partie TLD. p>

avec Preg_match code> Vous devez envelopper entre certains délimiteurs P>

$pattern = '/(?:https?:\/\/)?(?:[a-zA-Z0-9.-]+?\.(?:com|net|org|gov|edu|mil)|\d+\.\d+\.\d+\.\d+)/';


2 commentaires

J'ai essayé cette règle avec Preg_Match et sa paupage des erreurs. Est-ce que je manque quelque chose? J'ai fait Preg_Match ($ motif, $ URL) et votre regex à l'intérieur des citations.


@Tux s'il vous plaît voir la réponse modifiée.



0
votes

Ne pas utiliser une expression régulière. Tous les problèmes qui impliquent des chaînes doivent utiliser des regexes.

N'écrivez pas votre propre validateur d'URL. La validation de l'URL est un problème résolu et il existe un code existant déjà écrit, débogué et tester. En fait, il vient standard avec PHP.

Regardez la fonctionnalité de filtrage intégrée de PHP: http: //us2.php .NET / manuel / fr / book.filter.php


1 commentaires

Pas tout à fait correct. URL Validator (filtre_var) échoue de manière miséreuse dans PHP et pourtant, nous n'avons pas un bon problème résolu pour cela. La règle de l'OP dit "Tant que le TLD est présent", donc regex est une solution acceptable.



6
votes

Pour la validation de l'URL Solution parfaite.

La réponse ci-dessus a raison mais ne fonctionne pas sur tous les domaines tels que .Me, .it, .in

donc s'il vous plaît utile ci-dessous pour le match URL: xxx


1 commentaires

passer plusieurs points



1
votes

Je pense que vous pouvez utiliser indicateurs pour filtre_vars .

pour filtre_validate_url Il y a plusieurs drapeaux disponibles:

  • filtre_flag_scheme_requiked nécessite que l'URL contienne un schéma partie.
  • filtre_flag_host_requiked nécessite que l'URL contient un hôte partie.
  • filtre_flag_path_requiked nécessite que l'URL contient un chemin partie.
  • filtre_flag_query_requiked nécessite l'URL de contenir une requête chaîne.

    filtre_flag_scheme_requiked et filtre_flag_host_required utilisé par défaut.

    permet de vérifier la partie de chemin et ne voulez pas vérifier Pour une partie du schéma, vous pouvez faire quelque chose comme ceci (Falg est un masque bitm): xxx


1 commentaires

Essayer de supprimer le drapeau du schéma de cette manière ne fonctionne pas.