使用正則表達(dá)式驗(yàn)證域名的教程
下面是一篇關(guān)于如何使用正則表達(dá)式驗(yàn)證域名的教程。
如何使用正則表達(dá)式驗(yàn)證域名
簡介
域名是互聯(lián)網(wǎng)上網(wǎng)站的地址,每個(gè)域名由多個(gè)標(biāo)簽(label)組成,標(biāo)簽之間用點(diǎn) .
分隔。域名規(guī)則有很多細(xì)節(jié),但基本要求是:
- 每個(gè)標(biāo)簽只能包含字母、數(shù)字和短橫線
-
。 - 標(biāo)簽的長度不能超過 63 個(gè)字符。
- 域名的最后一部分(即頂級域名,TLD)必須由字母組成,且至少為 2 個(gè)字符。
在本文中,我們將學(xué)習(xí)如何使用正則表達(dá)式來驗(yàn)證域名是否合法。
正則表達(dá)式分析
我們可以使用以下正則表達(dá)式來驗(yàn)證域名格式是否正確:
^(?:[a-zA-Z0-9-]{1,63}\.)+[a-zA-Z]{2,}$
解釋
^
和$
:^
:表示匹配字符串的開始。$
:表示匹配字符串的結(jié)束。通過這兩個(gè)符號,我們可以確保整個(gè)字符串符合正則表達(dá)式的規(guī)則。
(?: ... )
:- 這是一個(gè)非捕獲組,用于將一組元素組合在一起,但是不會把它們單獨(dú)捕獲用于后續(xù)的處理。這里的非捕獲組用于重復(fù)匹配標(biāo)簽部分。
[a-zA-Z0-9-]{1,63}
:[a-zA-Z0-9-]
:表示標(biāo)簽部分可以包含小寫字母、大寫字母、數(shù)字和短橫線-
。{1,63}
:表示每個(gè)標(biāo)簽的長度應(yīng)在 1 到 63 個(gè)字符之間。
\.
:\.
用于匹配點(diǎn).
。由于點(diǎn)在正則表達(dá)式中有特殊意義(表示任何單個(gè)字符),所以我們使用反斜杠對它進(jìn)行轉(zhuǎn)義。
+
:+
表示前面的模式(即標(biāo)簽部分和點(diǎn))可以重復(fù)多次,表示域名可以有多個(gè)標(biāo)簽部分。
[a-zA-Z]{2,}
:[a-zA-Z]
:表示頂級域名(TLD)部分只可以包含字母。{2,}
:表示頂級域名的長度必須至少為 2 個(gè)字符。 合法的域名示例
以下是一些合法的域名,正則表達(dá)式應(yīng)當(dāng)能夠匹配:
example.com
www.example.com
subdomain.example.co
my-website.example.org
不合法的域名示例
以下是一些不合法的域名,正則表達(dá)式會排除:
- example..com —— 雙點(diǎn) .. 不合法
- -example.com —— 域名標(biāo)簽不能以短橫線 - 開頭
- example-.com —— 域名標(biāo)簽不能以短橫線 - 結(jié)尾
- .example.com —— 域名不能以點(diǎn) . 開頭
- example —— 沒有頂級域名部分(缺少點(diǎn))
- example.c —— 頂級域名長度小于 2 個(gè)字符
- example.123 —— 頂級域名不能包含數(shù)字
使用 Java 正則表達(dá)式進(jìn)行域名驗(yàn)證
在 Java 中,我們可以使用 Pattern
類和 Matcher
類來編寫一個(gè)方法來驗(yàn)證域名。以下是 Java 實(shí)現(xiàn):
import java.util.regex.Matcher; import java.util.regex.Pattern; public class DomainValidator { // 域名驗(yàn)證正則表達(dá)式 private static final String DOMAIN_REGEX = "^(?:[a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,}$"; // 驗(yàn)證域名是否合法 public static boolean isValidDomain(String domain) { // 創(chuàng)建模式對象 Pattern pattern = Pattern.compile(DOMAIN_REGEX); // 創(chuàng)建匹配器對象 Matcher matcher = pattern.matcher(domain); // 返回是否匹配 return matcher.matches(); } // 測試方法 public static void main(String[] args) { // 測試合法域名 System.out.println(isValidDomain("example.com")); // true System.out.println(isValidDomain("www.example.com")); // true System.out.println(isValidDomain("subdomain.example.co")); // true System.out.println(isValidDomain("my-website.example.org")); // true // 測試不合法域名 System.out.println(isValidDomain("example..com")); // false System.out.println(isValidDomain("-example.com")); // false System.out.println(isValidDomain("example-.com")); // false System.out.println(isValidDomain(".example.com")); // false System.out.println(isValidDomain("example")); // false System.out.println(isValidDomain("example.c")); // false System.out.println(isValidDomain("example.123")); // false } }
解釋:
- 正則表達(dá)式:我們將正則表達(dá)式
DOMAIN_REGEX
定義為常量,以便在 Java 代碼中使用。 - isValidDomain 方法:該方法接收一個(gè)字符串參數(shù)
domain
,并使用Pattern.compile()
方法編譯正則表達(dá)式,再使用matcher.matches()
來驗(yàn)證輸入的字符串是否符合域名格式。 - main 方法:測試了多個(gè)合法和不合法的域名,以驗(yàn)證
isValidDomain()
方法的正確性。
總結(jié)
通過本教程,你已經(jīng)學(xué)會了如何使用正則表達(dá)式來驗(yàn)證域名格式。我們編寫了一個(gè)正則表達(dá)式,確保域名符合基本的規(guī)則:每個(gè)標(biāo)簽只能包含字母、數(shù)字和短橫線,標(biāo)簽長度限制在 1 到 63 個(gè)字符之間,且頂級域名必須由字母組成且長度至少為 2 個(gè)字符。
我們還使用 Java 的 Pattern
和 Matcher
類實(shí)現(xiàn)了一個(gè)域名驗(yàn)證方法,并對合法和不合法的域名進(jìn)行了測試。
希望這篇教程對你有所幫助!
指定后綴域名驗(yàn)證
以下是從阿里云域名購買處獲得的一些域名后綴:
.ac.cn .ah.cn .archi .art .asia .auto .autos .baby .band .beauty .beer .bio .biz .bj.cn .black .blue .bond .cab .cafe .car .cars .cash .cc .center .chat .city .click .cloud .club .cn .co .college .com .com.cn .company .cool .cq.cn .cyou .design .email .fan .fans .fashion .fit .fj.cn .fun .fund .fyi .games .gd.cn .global .gold .gov.cn .green .group .gs.cn .guru .gx.cn .gz.cn .ha.cn .hair .hb.cn .he.cn .hi.cn .hk.cn .hl.cn .hn.cn .homes .host .icu .info .ink .jl.cn .js.cn .jx.cn .kim .law .life .live .ln.cn .lotto .love .ltd .luxe .makeup .market .mba .me .media .mo.cn .mobi .monster .motorcycles .net .net.cn .news .nm.cn .nx.cn .online .org.cn .organic .pink .plus .poker .press .pro .promo .protection .pub .pw .qh.cn .quest .red .ren .rent .run .sc.cn .school .sd.cn .security .sh.cn .shop .shopping .show .site .ski .skin .sn.cn .social .space .storage .store .studio .sx.cn .tax .team .tech .technology .theatre .tickets .tj.cn .today .top .tv .tw.cn .uno .video .vin .vip .vote .voto .wang .website .wiki .work .world .xin .xj.cn .xyz .xz.cn .yachts .yn.cn .yoga .zj.cn .zone .餐廳 .佛山 .公司 .廣東 .集團(tuán) .企業(yè) .商標(biāo) .商城 .商店 .網(wǎng)店 .網(wǎng)絡(luò) .網(wǎng)址 .我愛你 .游戲 .娛樂 .在線 .招聘 .中國 .中文網(wǎng).ac.cn .ah.cn .archi .art .asia .auto .autos .baby .band .beauty .beer .bio .biz .bj.cn .black .blue .bond .cab .cafe .car .cars .cash .cc .center .chat .city .click .cloud .club .cn .co .college .com .com.cn .company .cool .cq.cn .cyou .design .email .fan .fans .fashion .fit .fj.cn .fun .fund .fyi .games .gd.cn .global .gold .gov.cn .green .group .gs.cn .guru .gx.cn .gz.cn .ha.cn .hair .hb.cn .he.cn .hi.cn .hk.cn .hl.cn .hn.cn .homes .host .icu .info .ink .jl.cn .js.cn .jx.cn .kim .law .life .live .ln.cn .lotto .love .ltd .luxe .makeup .market .mba .me .media .mo.cn .mobi .monster .motorcycles .net .net.cn .news .nm.cn .nx.cn .online .org.cn .organic .pink .plus .poker .press .pro .promo .protection .pub .pw .qh.cn .quest .red .ren .rent .run .sc.cn .school .sd.cn .security .sh.cn .shop .shopping .show .site .ski .skin .sn.cn .social .space .storage .store .studio .sx.cn .tax .team .tech .technology .theatre .tickets .tj.cn .today .top .tv .tw.cn .uno .video .vin .vip .vote .voto .wang .website .wiki .work .world .xin .xj.cn .xyz .xz.cn .yachts .yn.cn .yoga .zj.cn .zone .餐廳 .佛山 .公司 .廣東 .集團(tuán) .企業(yè) .商標(biāo) .商城 .商店 .網(wǎng)店 .網(wǎng)絡(luò) .網(wǎng)址 .我愛你 .游戲 .娛樂 .在線 .招聘 .中國 .中文網(wǎng)
要求在一段文本中,用正則表達(dá)式匹配出包含我給的后綴域名的數(shù)據(jù),正則表達(dá)式如下:
(?:[a-zA-Z0-9-]+\.)+(?:ac\.cn|ah\.cn|archi|art|asia|auto|autos|baby|band|beauty|beer|bio|biz|bj\.cn|black|blue|bond|cab|cafe|car|cars|cash|cc|center|chat|city|click|cloud|club|cn|co|college|com|com\.cn|company|cool|cq\.cn|cyou|design|email|fan|fans|fashion|fit|fj\.cn|fun|fund|fyi|games|gd\.cn|global|gold|gov\.cn|green|group|gs\.cn|guru|gx\.cn|gz\.cn|ha\.cn|hair|hb\.cn|he\.cn|hi\.cn|hk\.cn|hl\.cn|hn\.cn|homes|host|icu|info|ink|jl\.cn|js\.cn|jx\.cn|kim|law|life|live|ln\.cn|lotto|love|ltd|luxe|makeup|market|mba|me|media|mo\.cn|mobi|monster|motorcycles|net|net\.cn|news|nm\.cn|nx\.cn|online|org\.cn|organic|pink|plus|poker|press|pro|promo|protection|pub|pw|qh\.cn|quest|red|ren|rent|run|sc\.cn|school|sd\.cn|security|sh\.cn|shop|shopping|show|site|ski|skin|sn\.cn|social|space|storage|store|studio|sx\.cn|tax|team|tech|technology|theatre|tickets|tj\.cn|today|top|tv|tw\.cn|uno|video|vin|vip|vote|voto|wang|website|wiki|work|world|xin|xj\.cn|xyz|xz\.cn|yachts|yn\.cn|yoga|zj\.cn|zone|餐廳|佛山|公司|廣東|集團(tuán)|企業(yè)|商標(biāo)|商城|商店|網(wǎng)店|網(wǎng)絡(luò)|網(wǎng)址|我愛你|游戲|娛樂|在線|招聘|中國|中文網(wǎng))
測試數(shù)據(jù)如下:
www.example.com www.test.ac.cn example.企業(yè) mywebsite.中國 www.example.ac.cn test.ah.cn mywebsite.archi site.com invalidwebsite.xyz example.bj.cn example.com.cn random.website /zuankeba/3894433.html
效果如下:
到此這篇關(guān)于如何使用正則表達(dá)式驗(yàn)證域名的文章就介紹到這了,更多相關(guān)正則表達(dá)式驗(yàn)證域名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php中常用的正則表達(dá)式的介紹及應(yīng)用實(shí)例代碼
在編寫處理字符串的程序或網(wǎng)頁時(shí),經(jīng)常會有查找符合某些復(fù)雜規(guī)則的字符串的需要。正則表達(dá)式就是用于描述這些規(guī)則的語法。2009-12-12js正則匹配table,img及去除各種標(biāo)簽問題
這篇文章主要介紹了js正則匹配table,img及去除各種標(biāo)簽問題,需要的朋友可以參考下2020-04-04正則表達(dá)式初運(yùn)用之認(rèn)證界面的實(shí)現(xiàn)代碼
這篇文章主要介紹了正則表達(dá)式初運(yùn)用之認(rèn)證界面的實(shí)現(xiàn)代碼,代碼簡單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09JS 正則表達(dá)式(學(xué)習(xí)筆記2)匹配網(wǎng)址url參數(shù)
呵呵,剛學(xué)習(xí)正則表達(dá)式,今天幫一個(gè)美女解決了個(gè)問題。感到很高興。先貼下今天都學(xué)了什么吧。不然忘記了。2010-05-05