web-dev-qa-db-fra.com

Vérifier si une chaîne est une URL

il suffit de vérifier si une chaîne donnée est une URL ou autre chose. Puis-je utiliser quelque chose comme ce qui suit ou Jomlla a déjà quelque chose à faire avec:

$url = "http://www.my_url.com";
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
    // is URL
} else {
    // not URL
}

Merci.

3
user3477054

La meilleure solution serait d'utiliser preg_match () avec une expression régulière. Celui que j'ai utilisé auparavant est:

((mailto \: | (nouvelles | (ht | f) tp (s?)) | telnet | webcal | rss | nntp | fichier \: //) {1}\S +)

Vous pouvez également rechercher et trouver de nombreuses autres variantes adaptées à des tâches spécifiques.

3
George Sexton

Joomla n'a pas de filtre "URL" défini, vous pouvez vérifier les filtres disponibles à cette URL Instructions de codage sécurisé

Vous pouvez également étendre la classe JInput si vous le souhaitez, mais je ne pense pas que cela en vaille la peine.

Pour le remplacement permanent de JInput ou JFilterInput, vous devez écrire un plugin. En voici un exemple: Ignore les classes Joomla! Core

2

Certes, filter_var($url, FILTER_VALIDATE_URL) est imparfait, mais les expressions rationnelles le seront probablement davantage (et à mesure que la précision du motif des expressions rationnelles s'améliorera, le code-gonflement grossira et la lisibilité/la maintenabilité s'effondreront).

Comme PHP continue de s’améliorer avec chaque nouvelle version, l’exactitude de filter_var()] ne fera que s’améliorer. Si vous lancez votre propre motif regex statique, le seul espoir d’amélioration repose sur vos épaules et compte sur vous pour consacrer du temps et des efforts à l’affiner.

La coche verte sur StackOverflow n’est pas toujours fiable - tenez également compte des votes positifs et des commentaires. Cette page mérite certainement une lecture: validation PHP/regex pour URL

Mon conseil (partagé par de nombreux développeurs) est que vous ne devriez utiliser regex que lorsque cela offre un avantage unique par rapport aux autres fonctions php plus simples. Jusqu'à ce que vous rencontriez un cas où filter_var() vous échoue, vous devriez éviter de vous fier à l'expression régulière pour cette tâche.

Quant à la lecture centrée sur Joomla ...

Il n'y a pas de balise avec un id sur cette page, vous devrez donc faire défiler vers le bas de la page: https://docs.joomla.org/Server-side_form_validation =

https://docs.joomla.org/URL_form_field_type

Joomla n'offre actuellement pas de validateur JFactory::getApplication->input->... Pour les URL, probablement parce qu'il n'y a pas de solution rapide à construire.


p.s.

if (!filter_var($url, FILTER_VALIDATE_URL) === false) {

est le même que

if (filter_var($url, FILTER_VALIDATE_URL) !== false) {

est le même que

if (filter_var($url, FILTER_VALIDATE_URL)) { <- utilisez simplement celui-ci par souci de brièveté



p.p.s. Si vous avez réellement besoin de vérifier qu'une URL est réelle/réelle, vous pouvez configurer un appel distinct à l'URL et rechercher une "pulsation". , mais il y a de bonnes chances que ce soit excessif pour la plupart des projets.

1
mickmackusa