我這里給你寫了一個例子
創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的扶風(fēng)網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
var reg = /^[a-zA-Z]$/;// 這里是 正則表達(dá)式,大小寫英文字母都可以
if (reg.test(userName.value) != true) {
alert("用戶應(yīng)為全英文");
}
希望對你有用,如果還有問題,請繼續(xù)追加問題
親愛的讀者朋友,如果你點開了這篇文章,說明你對正則很感興趣。
想必你也了解正則的重要性,在我看來正則表達(dá)式是衡量程序員水平的一個側(cè)面標(biāo)準(zhǔn)。
關(guān)于正則表達(dá)式的教程,網(wǎng)上也有很多,相信你也看了一些。
與之不同的是,本文的目的是希望所有認(rèn)真讀完的童鞋們,都有實質(zhì)性的提高。
本文內(nèi)容共有七章,用JavaScript語言完整地討論了正則表達(dá)式的方方面面。
如果覺得文章某塊兒沒有說明白清楚,歡迎留言,能力范圍之內(nèi),老姚必做詳細(xì)解答。
構(gòu)造正則表達(dá)式的方法和創(chuàng)建數(shù)學(xué)表達(dá)式的方法一樣。也就是用多種元字符與運算符可以將小的表達(dá)式結(jié)合在一起來創(chuàng)建更大的表達(dá)式。正則表達(dá)式的組件可以是單個的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。
正則表達(dá)式是由普通字符(例如字符 a 到 z)以及特殊字符(稱為"元字符")組成的文字模式。模式描述在搜索文本時要匹配的一個或多個字符串。正則表達(dá)式作為一個模板,將某個字符模式與所搜索的字符串進(jìn)行匹配。
最簡單的正則 如 : \d{4}-\d{2}-\d{2} 但是實際情況卻不是那么簡單,,要考慮,有效性和閏年等問題..... 對于日期的有效范圍,不同的應(yīng)用場景會有所不同。MSDN中定義的DateTime對象的有效范圍是:0001-01-01 00:00:00到9999-12-31 23:59:59。 UNIX時間戳的0按照ISO 8601規(guī)范為 :1970-01-01T00:00:00Z。 先考慮與年份無關(guān)的前三條規(guī)則,年份可統(tǒng)一寫作 (?!0000)[0-9]{4} 下面僅考慮月和日的正則 1. 包括平年在內(nèi)的所有年份的月份都包含1-28日 (0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8]) 2. 包括平年在內(nèi)的所有年份除2月外都包含29和30日 (0[13-9]|1[0-2])-(29|30) 3. 包括平年在內(nèi)的所有年份1、3、5、7、8、10、12月都包含31日 (0[13578]|1[02])-31) 合起來就是除閏年的2月29日外的其它所有日期 (?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31) 接下來考慮閏年的實現(xiàn) 1 : 四年一閏 ([0-9]{2}(0[48]|[2468][048]|[13579][26]) 2 : 百年不閏,四百年再閏 (0[48]|[2468][048]|[13579][26])00 3 : 合起來就是所有閏年的2月29日 ([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29) 四條規(guī)則都已實現(xiàn),且互相間沒有影響,合起來就是所有符合DateTime范圍的日期的正則 ^((?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)$ 考慮到這個正則表達(dá)式僅僅是用作驗證,所以捕獲組沒有意義,只會占用資源,影響匹配效率,所以可以使用非捕獲組來進(jìn)行優(yōu)化。 ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$
參考資料:
“?:”是“非獲取存儲匹配”的意思
“ ?:” 只在一個“()”group中,緊貼著“(”出現(xiàn),例如“(?:abcdefg)”,不同于“ ? ”, “?: ”不是一個量詞,但是與“()”共同構(gòu)造一個元字符,這個元字符所匹配出來的結(jié)果,不會保留,也不能參與諸如替換計算等等的操作。(這個操作在服務(wù)端多見一些,前端用的不多)(javascript只有string對象的replace方法能用到這個功能)
簡單來說,就是你的正則表達(dá)式如果用不著在javascript里面使用replace方法,“?:”就可以省去(當(dāng)然,看個人喜好和排版習(xí)慣,還有調(diào)試中的頁面響應(yīng)速度,如果加了“?:”反而更快,那就用吧)。
這么說起來還是比較抽象,用實例代碼來說明吧。
!DOCTYPE html
html
head
meta charset="utf-8"
title/title
/head
body
p將匹配的數(shù)字增加后綴“9”/p
p class="demo"/(\d+)/gi:A23G4HFD567./p
p class="demo"/(?:\d+)/gi:A23G4HFD567./p
button onclick="myFunction()"點我/button
script
function myFunction(){
var e=document.getElementsByClassName("demo");
var str=e[0].innerHTML;
var n=str.replace(/(\d+)/gi,"$19");
e[0].innerHTML=n;
str=e[1].innerHTML;
var n=str.replace(/(?:\d+)/gi,"$19");
e[1].innerHTML=n;
}
/script
/body
/html
!----
!--在實例里面“$1代表第一個“()”所匹配的結(jié)果--
點擊“點我”按鈕前
點擊“點我”按鈕后
可以看到“/(\d+)/gi”所匹配的結(jié)果被用于擴展替換字符串中的“$1”;
但是“/(?:\d+)/gi”所匹配的結(jié)果沒有被用于擴展替換字符串中的“$1”,盡管,它也成功地找到了被查找字符串中的數(shù)字,顯然結(jié)果沒有被保留。
對了,類似的問題,可以用這種辦法去對比驗證。(比如“?=”、“?!”、“?=”、“?!”是什么意思……)
上圖是在菜鳥教程找到的一個比較全面的正則表達(dá)式的元字符列表的部分:
還有,不同軟件的正則表達(dá)式的可能有不同的特性,但是目前perl的正則表達(dá)式是公認(rèn)最多特性的。
首先肯定的是JavaScript中是可以使用正則表達(dá)式的。
下面我就借鑒秒秒學(xué)上的內(nèi)容,簡單說下。
在沒有了解正則表達(dá)式之前,是很難理解它的強大功能的,我們先來看一個在JavaScript中使用正則表達(dá)式的語句。
//創(chuàng)建正則表達(dá)式,這和聲明字符串很相似,但hello不是放在雙引號中,而是在雙斜杠中’//’。
var myRE = /hello/;
示例中創(chuàng)建正則表達(dá)式的代碼其實是簡寫,完整寫法為:var myRE = new RegExp(“hello”);
/*
*使用正則表達(dá)式在字符串中查找信息。
*下面代碼使用test方法匹配字符串,這里在myString中匹配myRE中的”hello”字符串,
*若myString中能匹配到test方法,則返回true,否則返回false。匹配過程是大小寫敏
*感的。
*/
var myString = “Does this sentence have the word hello in it?”
if( myRE.test(myString) ) {
alert(“Yes”);
}
test方法只返回true和false,而使用search方法能返回”hello”在myString中第一次出現(xiàn)的下標(biāo)。
介紹了JavaScript中使用正則表達(dá)式的用法后,下面我們來說下正則表達(dá)式本身。
在剛剛的示例中,我們用正則表達(dá)式匹配的是字符串hello。但很多時候需要匹配的字符串是比較復(fù)雜的,如電子郵箱的格式。這時我們就要使用由普通字符以及特殊字符組成的文字模式。特殊字符也許對不了解正則表達(dá)式的人來說就是一串亂七八糟的字符,但其實就是因為有了這些亂糟糟的字符,才能使正則表達(dá)式好些的強大。下面我們來了解下正則表達(dá)式中的特殊字符:
通過普通字符以及特殊字符可以組成復(fù)雜的正則表達(dá)式。如下是一個逐漸復(fù)雜的示例:
其實上面的正則表達(dá)式并不算復(fù)雜。很多常用的正則表達(dá)式可以在網(wǎng)上找到,不用我們自己編寫,如:
匹配電子郵箱:/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
匹配URL:/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
復(fù)雜正則表達(dá)式的編寫并不簡單,題主只要先大概的了解即可,希望能幫助你入門,推薦你去一個不錯的自學(xué)網(wǎng)站?秒秒學(xué)上過一遍基礎(chǔ)知識。