SORU
6 Mayıs 2009, ÇARŞAMBA


Nasıl Python düzenli bir ifade ile bir URL doğrulamak mı?

Google App Engine üzerinde bir uygulama inşa ediyorum. Python için inanılmaz yeni geldim ve 3 gündür şu sorunla karşı başımı dayak olmuştur.

Bir RSS temsil eden bir sınıf var ve bu sınıfın içinde bir yöntem ayrica aradım. Bu yöntem, giriş bir URL.

Re python modülü RFC 3986 Reg-ex (http://www.ietf.org/rfc/rfc3986.txt) doğrulamak için kullanmaya çalışıyorum

Aşağıda bir makaslagerekiriş?

p = re.compile('^(([^:/?#] ):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?')
m = p.match(url)
if m:
  self.url = url
  return url

CEVAP
6 Mayıs 2009, ÇARŞAMBA


(Ve doğrulama) URL ayrıştırmak için kolay bir yol urlparse modülüdür.

Bir düzenli ifade için çok çalışıyorum.

< / ^ hr .

"Hemen hemen her şey için geçerli bir URL olduğu için." yöntemi doğrulamak yok Bunu bölmek için bazı noktalama kuralları vardır. Hiçbir noktalama işareti yok, hala geçerli bir URL var.

RFC dikkatli bir şekilde kontrol edin ve eğer bir "" URL. geçersiz inşa bakalım Kuralları çok esnektir.

Örneğin ::::: geçerli bir URL değil. Yolu ":::::". Çok aptalca bir dosya adı, ancak geçerli bir dosya adı.

Ayrıca, ///// geçerli bir URL değil. Bu netloc ("") hostname "". Yolu "///". Yine, aptal. De geçerli. Bu URL eşdeğer "///" normalleştirir.

"bad://///worse/////" gibi bir şey tamamen geçerli. Aptalca ama geçerli.

Alt Satırda. Bunu ayrıştırmak ve parçaları eğer bir şekilde hoşa gitmeyen olup olmadığını görmek için bak.

Her zaman olmak düzeni istiyoruz""? http Sen netloc her zaman olmak istiyorum ""? www.somename.somedomain yap Yol unıx gibi bakmak ister misiniz? Ya da windows gibi? Sorgu dizesi kaldırmak istiyor musunuz? Yoksa korumak mı?

Bu RFC-belirtilen doğrulamalarını değildir. Bu doğrulamaları uygulama için benzersizdir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HowcastTechGadgets

    HowcastTechG

    22 EYLÜL 2010
  • Justin Case

    Justin Case

    3 EKİM 2011
  • Truc Minh

    Truc Minh

    23 Ocak 2011