Anda dapat menggunakan ekspresi reguler berikut secara terpisah atau dengan menggabungkannya dalam gabungan ATAU ekspresi.
ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
ValidHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$";
ValidIpAddressRegex cocok dengan alamat IP yang valid dan ValidHostnameRegex nama host yang valid. Bergantung pada bahasa yang Anda gunakan \ bisa harus lolos dengan \.
ValidHostnameRegex valid sesuai RFC 1123 . Awalnya, RFC 952 menentukan bahwa segmen nama host tidak dapat dimulai dengan angka.
http://en.wikipedia.org/wiki/Hostname
Spesifikasi asli dari nama host di RFC 952 , mengamanatkan bahwa label tidak dapat dimulai dengan digit atau dengan tanda hubung, dan tidak boleh diakhiri dengan tanda hubung. Namun, spesifikasi berikutnya ( RFC 1123 ) mengizinkan label nama host untuk memulai dengan angka.
Valid952HostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";
éxämplè.com
=xn--xmpl-loa1ab.com
) dan kemudian divalidasi.123.456.789.0
dan mengatakan itu adalah nama host yang valid.Regex hostname smink tidak memperhatikan batasan pada panjang label individual dalam nama host. Setiap label dalam nama host yang valid mungkin tidak lebih dari 63 oktet.
Perhatikan bahwa garis miring terbalik pada akhir baris pertama (atas) adalah sintaksis shell Unix untuk memisahkan garis panjang. Itu bukan bagian dari ekspresi reguler itu sendiri.
Ini hanya ekspresi reguler saja dalam satu baris:
Anda juga harus memeriksa secara terpisah bahwa panjang total nama host tidak boleh melebihi 255 karakter . Untuk informasi lebih lanjut, silakan berkonsultasi dengan RFC-952 dan RFC-1123.
sumber
/^[a-z\d]([a-z\d\-]{0,61}[a-z\d])?(\.[a-z\d]([a-z\d\-]{0,61}[a-z\d])?)*$/i
Untuk mencocokkan alamat IP yang valid gunakan regex berikut:
dari pada:
Penjelasan
Banyak mesin regex cocok dengan kemungkinan pertama dalam
OR
urutan. Misalnya, coba regex berikut:Uji
Uji perbedaan antara baik vs buruk
sumber
([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*
versus([a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]|[a-zA-Z0-9])(\.([a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])|[a-zA-Z0-9]))*
+
di akhir daripada*
untuk melihat kegagalan.Saya sepertinya tidak dapat mengedit posting teratas, jadi saya akan menambahkan jawaban saya di sini.
Untuk hostname - jawaban mudah, pada contoh egrep di sini - http: //www.linuxinsight.com/how_to_grep_for_ip_addresses_using_the_gnu_egrep_utility.html
Meskipun case tidak memperhitungkan nilai-nilai seperti 0 dalam octet pertama, dan nilai lebih dari 254 (addres ip) atau 255 (netmask). Mungkin pernyataan tambahan jika akan membantu.
Adapun nama host legal dns, asalkan Anda hanya memeriksa nama host internet (dan bukan intranet), saya menulis snipped berikut ini, campuran shell / php tetapi harus berlaku sebagai ungkapan reguler apa pun.
pertama-tama pergi ke situs web ietf, unduh dan parsing daftar nama domain level 1 legal:
Itu akan memberi Anda sepotong kode ulang bagus yang memeriksa legalitas nama domain top, seperti .com .org atau .ca
Kemudian tambahkan bagian pertama dari ekspresi sesuai dengan pedoman yang ditemukan di sini - http: //www.domainit.com/support/faq.mhtml?category=Domain_FAQ&question=9 (kombinasi alfanumerik dan simbol '-' apa pun, tanda hubung tidak boleh dalam awal atau akhir oktet.
Kemudian kumpulkan semuanya (contoh PHP preg_match):
Anda mungkin juga ingin menambahkan pernyataan if untuk memeriksa string yang Anda periksa lebih pendek dari 256 karakter - http://www.ops.ietf.org/lists/namedroppers/namedroppers.2003/msg00964.html
sumber
Perlu dicatat bahwa ada perpustakaan untuk sebagian besar bahasa yang melakukan ini untuk Anda, sering dibangun ke dalam perpustakaan standar. Dan pustaka-pustaka itu cenderung diperbarui lebih sering daripada kode yang Anda salin dari jawaban Stack Overflow empat tahun lalu dan lupa. Dan tentu saja mereka juga umumnya akan mengurai alamat menjadi beberapa bentuk yang dapat digunakan, daripada hanya memberi Anda kecocokan dengan sekelompok kelompok.
Misalnya, mendeteksi dan mem-parsing IPv4 di (POSIX) C:
Jelas, fungsi-fungsi seperti itu tidak akan berfungsi jika Anda mencoba, misalnya, menemukan semua alamat yang valid dalam pesan obrolan — tetapi bahkan di sana, mungkin lebih mudah menggunakan regex sederhana tetapi terlalu bersemangat untuk menemukan kecocokan potensial, dan kemudian menggunakan perpustakaan untuk menguraikannya.
Misalnya, dalam Python:
sumber
sumber
Saya pikir ini adalah regex validasi Ip terbaik. tolong periksa sekali !!!
sumber
sumber
Ini berfungsi untuk alamat IP yang valid:
sumber
sumber
Ini adalah regex yang saya gunakan di Ant untuk mendapatkan IP host proxy atau nama host dari ANT_OPTS. Ini digunakan untuk mendapatkan IP proxy sehingga saya bisa menjalankan tes "isreachable" semut sebelum mengkonfigurasi proxy untuk JVM bercabang dua.
sumber
\w
sana, tidak akan menangkap IP, hanya nama host pada situasi tertentu.Saya menemukan ini berfungsi dengan baik untuk alamat IP. Ini memvalidasi seperti jawaban teratas tetapi juga memastikan ip terisolasi sehingga tidak ada teks atau lebih banyak angka / desimal setelah atau sebelum ip.
sumber
ini digunakan hanya untuk validasi tipe ini
hanya berfungsi jika http://www.kk.com http://www.kk.co.in
tidak bekerja untuk
http://www.kk.com/ http: //www.kk.co.in.kk
http://www.kk.com/dfas http://www.kk.co.in/
sumber
coba ini:
itu berfungsi dalam kasus saya.
sumber
Mengenai alamat IP, tampaknya ada beberapa perdebatan tentang apakah akan memasukkan angka nol di depan. Itu dulunya praktik umum dan diterima secara umum, jadi saya berpendapat bahwa mereka harus ditandai sebagai valid terlepas dari preferensi saat ini. Ada juga beberapa ambiguitas tentang apakah teks sebelum dan sesudah string harus divalidasi dan, sekali lagi, saya pikir seharusnya. 1.2.3.4 adalah IP yang valid tetapi 1.2.3.4.5 tidak dan bagian 1.2.3.4 atau 2.3.4.5 tidak menghasilkan pertandingan. Beberapa masalah dapat ditangani dengan ungkapan ini:
Bagian yang disayangkan di sini adalah kenyataan bahwa bagian regex yang memvalidasi oktet diulangi seperti yang terjadi pada banyak solusi yang ditawarkan. Meskipun ini lebih baik daripada untuk contoh pola, pengulangan dapat dihilangkan seluruhnya jika subrutin didukung dalam regex yang digunakan. Contoh berikutnya memungkinkan fungsi-fungsi dengan
-P
saklargrep
dan juga mengambil keuntungan dari fungsi lookahead dan lookhhind. (Nama fungsi yang saya pilih adalah 'o' untuk oktet. Saya bisa menggunakan 'oktet' sebagai nama tetapi ingin menjadi singkat.)Penanganan titik sebenarnya dapat membuat negatif palsu jika alamat IP dalam file dengan teks dalam bentuk kalimat karena periode dapat mengikuti tanpa menjadi bagian dari notasi bertitik. Varian di atas akan memperbaikinya:
sumber
sumber
Kerangka kerja Jaringan baru telah menyediakan inisialisasi untuk struct IPv4Address dan struct IPv6Address yang menangani bagian alamat IP dengan sangat mudah. Melakukan ini di IPv6 dengan regex sangat sulit dengan semua aturan pemendekan.
Sayangnya saya tidak punya jawaban elegan untuk nama host.
Perhatikan bahwa Kerangka kerja jaringan terbaru, sehingga dapat memaksa Anda untuk mengkompilasi untuk versi OS terbaru.
sumber
bagaimana dengan ini?
sumber
di php:
filter_var(gethostbyname($dns), FILTER_VALIDATE_IP) == true ? 'ip' : 'not ip'
sumber
Memeriksa nama host seperti ... mywebsite.co.in, thangaraj.name, 18thangaraj.in, thangaraj106.in dll,
sumber
inet_aton
cukup baikSaya memikirkan pola pencocokan regex sederhana ini untuk pencocokan alamat IP \ d + [.] \ D + [.] \ D + [.] \ D +
sumber
^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
dan tentu saja itu tidak akan menjadi cara yang benar. Jika Anda memiliki bahasa untuk menulis skrip, pasti Anda akan memiliki akses ke fungsi jaringan itu. Cara terbaik untuk memeriksa ip REAL itu untuk memberitahu sistem untuk mengkonversi dan ip ke format yang benar kemudian periksa benar / salah. Dalam kasus Python saya gunakansocket.inet_aton(ip)
. PHP yang Anda butuhkaninet_aton($ip)
.