Comment puis-je vérifier si une chaîne est une url valide?
Par exemple:
http://hello.it => yes
http:||bra.ziz, => no
et si c'est une url valide comment puis-je vérifier si c'est par rapport à un fichier image?
merci
Comment puis-je vérifier si une chaîne est une url valide?
Par exemple:
http://hello.it => yes
http:||bra.ziz, => no
et si c'est une url valide comment puis-je vérifier si c'est par rapport à un fichier image?
merci
Utiliser l' URI
module distribué avec Ruby:
require 'uri'
if url =~ URI::regexp
# Correct URL
end
MODIFIER
Comme Alexander Günther dit dans les commentaires, il vérifie si une chaîne contient une URL.
Pour vérifier si la chaîne est une URL, utilisez:
url =~ /\A#{URI::regexp}\z/
EDIT 2
Si vous voulez seulement vérifier les Url de sites web (http ou https), utilisez ceci:
url =~ /\A#{URI::regexp(['http', 'https'])}\z/
Semblables à des réponses ci-dessus, je trouve l'utilisation de ce regex pour être un peu plus précis:
URI::DEFAULT_PARSER.regexp[:ABS_URI]
Qui va invalider les url avec des espaces, par opposition à l' URI.regexp
qui permet d'espaces pour une raison quelconque.
modifier
J'ai récemment trouvé un raccourci qui est prévu pour les différentes URI rgexps. Vous pouvez accéder URI::DEFAULT_PARSER.regexp.keys
directement à partir de URI::#{key}
.
Par exemple, l' :ABS_URI
regexp peut être consulté à partir de URI::ABS_URI
.
Le problème avec le courant des réponses est qu' une URI n'est pas une URL.
Un URI peut être classé comme un repère, un nom, ou les deux. L' terme "Uniform Resource Locator" (URL) désigne le sous-ensemble d'Uri qui, en plus d'identifier des ressources, de fournir des moyens de la localisation de la ressource en décrivant son principal mécanisme d'accès (par exemple, son réseau "emplacement").
Depuis les Url sont un sous-ensemble d'Uri, il est clair que la correspondance spécifiquement pour les Uri avec succès en match indésirables valeurs. Par exemple, les Urnes:
"urn:isbn:0451450523" =~ URI::regexp
=> 0
Cela étant dit, autant que je sache, Ruby n'est pas un défaut pour analyser les Url , de sorte que vous aurez très probablement besoin d'un joyau de le faire. Si vous avez besoin de faire correspondre les Url plus précisément à l'adresse HTTP ou HTTPS format, vous pourriez faire quelque chose comme ceci:
uri = URI.parse(my_possible_url)
if uri.kind_of?(URI::HTTP) or uri.kind_of?(URI::HTTPS)
# do your stuff
end
Je préfère le Adressable gem. J'ai trouvé qu'il gère l'Url de manière plus intelligente.
require 'addressable/uri'
SCHEMES = %w(http https)
def valid_url?(url)
parsed = Addressable::URI.parse(url) or return false
SCHEMES.include?(parsed.scheme)
rescue Addressable::URI::InvalidURIError
false
end
C'est un assez vieux, mais j'ai pensé que je devais aller de l'avant et de contribuer:
String.class_eval do
def is_valid_url?
uri = URI.parse self
uri.kind_of? URI::HTTP
rescue URI::InvalidURIError
false
end
end
Maintenant, vous pouvez faire quelque chose comme:
if "http://www.omg.wtf".is_valid_url?
p "huzzah!"
end
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.