Saya telah mencari regex sederhana untuk URL, apakah ada yang punya yang berfungsi dengan baik? Saya tidak menemukan satu dengan kelas validasi kerangka zend dan telah melihat beberapa implementasi.
php
regex
url
validation
AndreLiem
sumber
sumber
Jawaban:
Saya menggunakan ini pada beberapa proyek, saya tidak yakin saya mengalami masalah, tetapi saya yakin itu tidak lengkap:
Sebagian besar sampah acak di akhir adalah menangani situasi seperti
http://domain.com.
dalam kalimat (untuk menghindari pencocokan titik akhir). Saya yakin itu bisa dibersihkan tetapi karena berhasil. Saya kurang lebih hanya menyalinnya dari proyek ke proyek.sumber
google.com
hanya jalur URL relatif yang valid tetapi bukan URL absolut yang valid. Dan saya pikir itulah yang dia cari.http://example.com/somedir/...
adalah URL yang sangat sah, meminta nama file...
- yang merupakan nama file yang sah.http://www.example
validGunakan
filter_var()
fungsi untuk memvalidasi apakah sebuah string adalah URL atau bukan:Menggunakan ekspresi reguler jika tidak perlu merupakan praktik yang buruk.
EDIT : Hati-hati, solusi ini tidak aman untuk unicode dan tidak aman untuk XSS. Jika Anda memerlukan validasi yang kompleks, mungkin lebih baik mencari di tempat lain.
sumber
http://www
Sesuai manual PHP - parse_url tidak boleh digunakan untuk memvalidasi URL.
Sayangnya, tampaknya
filter_var('example.com', FILTER_VALIDATE_URL)
tidak ada yang lebih baik.Keduanya
parse_url()
danfilter_var()
akan mengirimkan URL yang salah format sepertihttp://...
Oleh karena itu dalam kasus ini - regex adalah metode yang lebih baik.
sumber
Untuk berjaga-jaga jika Anda ingin tahu apakah url benar-benar ada:
sumber
$url
sebelum benar-benar memverifikasi url itu nyata karena operasi di atas mahal - mungkin hingga 200 milidetik tergantung pada ukuran file. Dalam beberapa kasus, url mungkin sebenarnya belum memiliki sumber daya di lokasinya yang tersedia (mis. Membuat url ke gambar yang belum diunggah). Selain itu Anda tidak menggunakan versi yang di-cache sehingga tidak sepertifile_exists()
itu akan men-cache stat pada file dan kembali hampir seketika. Solusi yang Anda berikan masih berguna. Mengapa tidak digunakan sajafopen($url, 'r')
?Sesuai John Gruber (Daring Fireball):
Ekspresi Reguler:
menggunakan di preg_match ():
Berikut adalah pola regex yang diperpanjang (dengan komentar):
Untuk detail lebih lanjut, silakan lihat: http://daringfireball.net/2010/07/improved_regex_for_matching_urls
sumber
Saya tidak berpikir bahwa menggunakan ekspresi reguler adalah hal yang cerdas untuk dilakukan dalam kasus ini. Tidak mungkin untuk mencocokkan semua kemungkinan dan bahkan jika Anda melakukannya, masih ada kemungkinan url tidak ada.
Berikut adalah cara yang sangat sederhana untuk menguji apakah url benar-benar ada dan dapat dibaca:
(jika tidak ada
preg_match
maka ini juga akan memvalidasi semua nama file di server Anda)sumber
Saya telah menggunakan yang ini dengan kesuksesan yang baik - saya tidak ingat dari mana saya mendapatkannya
sumber
sumber
Dan ada jawaban Anda =) Cobalah untuk memecahkannya, Anda tidak bisa !!!
sumber
Edit:
Sebagai kejadian ditunjukkan oleh kode ini telah DIHENTIKAN dengan rilis PHP 5.3.0 (2009-06-30) dan harus digunakan sebagaimana mestinya.
Hanya dua sen saya tetapi saya telah mengembangkan fungsi ini dan telah menggunakannya untuk beberapa waktu dengan sukses. Ini didokumentasikan dengan baik dan dipisahkan sehingga Anda dapat dengan mudah mengubahnya.
sumber
sumber
Terinspirasi dalam pertanyaan .NET StackOverflow ini dan dalam artikel yang direferensikan ini dari pertanyaan tersebut terdapat validator URI (URI berarti memvalidasi URL dan URN).
Saya telah berhasil menguji unit fungsi ini di dalam ValueObject yang saya buat bernama
Uri
dan diujiUriTest
.UriTest.php (Berisi kasus yang valid dan tidak valid untuk URL dan URN)
Uri.php (Objek Nilai)
Menjalankan UnitTests
Ada 65 pernyataan dalam 46 tes. Perhatian: ada 2 penyedia data untuk valid dan 2 lagi untuk ekspresi tidak valid. Satu untuk URL dan yang lainnya untuk URN. Jika Anda menggunakan versi PhpUnit v5.6 * atau yang lebih lama, Anda harus menggabungkan kedua penyedia data tersebut menjadi satu.
Cakupan kode
Ada 100% cakupan kode dalam pemeriksa URI sampel ini.
sumber
(http (s?): //) berarti http: // atau https: //
([a-z0-9 -] +.) + => 2.0 [a-z0-9-] berarti karakter az atau tanda 0-9 atau (-))
"/(http(s?)://)([a-z0-9-]+.)+[az]{2,4}(.[az]{2,4}) (/ [^] + ) / i "
Catatan: Maaf untuk bahasa Inggris yang buruk. Negara saya tidak menggunakannya dengan baik.
sumber
Oke, ini sedikit lebih rumit daripada regex sederhana, tetapi memungkinkan untuk jenis url yang berbeda.
Contoh:
Semua yang harus ditandai sebagai valid.
Perhatikan bahwa ada pemeriksaan in_array untuk protokol yang ingin Anda izinkan (saat ini hanya http dan https yang ada di daftar itu).
sumber
Regex URL terbaik yang berhasil untuk saya:
Contoh:
Sumber: http://urlregex.com/
sumber
Regex Peter terlihat tidak tepat bagi saya karena berbagai alasan. Ini memungkinkan semua jenis karakter khusus dalam nama domain dan tidak banyak menguji.
Fungsi Frankie terlihat bagus bagi saya dan Anda dapat membuat regex yang bagus dari komponen jika Anda tidak menginginkan fungsi, seperti:
Belum teruji tetapi saya pikir itu seharusnya berhasil.
Juga, jawaban Owen juga tidak terlihat 100%. Saya mengambil bagian domain dari regex dan mengujinya di alat penguji Regex http://erik.eae.net/playground/regexp/regexp.html
Saya meletakkan baris berikut:
di bagian "regexp" dan baris berikut:
di bawah bagian "teks contoh".
Hasilnya memungkinkan karakter minus masuk. Karena \ S berarti karakter non-spasi.
Perhatikan regex dari Frankie menangani minus karena memiliki bagian ini untuk karakter pertama:
Yang tidak akan membiarkan minus atau karakter khusus lainnya.
sumber
Inilah cara saya melakukannya. Tapi saya ingin mengatakan bahwa saya tidak terlalu paham tentang regex. Tapi itu harus berhasil :)
Dengan cara ini Anda tidak membutuhkan penanda eval pada pola Anda.
Semoga membantu :)
sumber
Berikut adalah kelas sederhana untuk Validasi URL menggunakan RegEx dan kemudian mereferensikan silang domain terhadap server RBL (Daftar Lubang Hitam Waktu Nyata) yang populer:
Install:
Pemakaian:
Tambahkan URL sebagai parameter
domain()
metode dan periksa kembaliannya.Keluaran:
Seperti yang Anda lihat di atas, www.bokranzr.com terdaftar sebagai situs web berbahaya melalui RBL sehingga domainnya dikembalikan sebagai salah.
sumber
Untuk siapa pun yang mengembangkan dengan WordPress, gunakan saja
untuk memvalidasi URL ( inilah dokumentasi WordPress tentang
esc_url_raw
). Ini menangani URL jauh lebih baik daripadafilter_var($url, FILTER_VALIDATE_URL)
karena ini unicode dan XSS-safe. ( Berikut adalah artikel bagus yang menyebutkan semua masalah denganfilter_var
).sumber
Menurut saya, ini paling berguna untuk mencocokkan URL ..
sumber
ftp:
?Ada fungsi asli PHP untuk itu:
Mengembalikan data yang difilter, atau FALSE jika filter gagal.
Lihat di sini
sumber