因為工作中的需要,要在Javascript下對字串的格式進行校正,想到使用Regex,於是有了這篇學習筆記。
學習樣本1:判斷非負整數
<html>
<head>
<title>在Javascript下使用Regex的學習筆記</title>
</head>
<body>
<script language="javascript">...
var regexs = /^/d+$/;
var result = regexs.test("4");
alert(result);
</script>
</body>
</html>
說明:
1、這是一個完整的例子,把全部代碼複製到一個文字檔中,另存新檔*.html格式就可以運行看到效果。
2、/^/d+$/中,兩個/之間的部分就是一個Regex,這個Regex代表的含義是非負整數。
3、^代表字串的起始字元,/d匹配任何數字,合起來的意思就是這個字串必須以數字開頭。
4、/d後面的+代表,1個或者多個的意思,合起來就是1個或者多個數字。
5、$代表在符串的結束字元,和前面聯絡在一起,就是結束字元必須也是數字。
6、所以綜合起來就表示,數字開始並且數字結束,中間也都是數位字串,字串的長度大於等於1,自然也就是代表非負整數了。
7、test()是Regex的一個方法,用於判斷指定的字串是否符合Regex的格式。在這個例子中,如果傳4或者0,最後都會返回true,如果傳負數,就會返回false。
學習樣本1中的Regex,還可以有另外的寫法:
var regexs = /^[0-9]+$/;
說明:
1、[0-9]代表0-9之間的任何一個數字,作用和/d一樣。
2、把這段代碼替換學習樣本1中相應的部分會得出同樣的結果。
根據上邊代碼,可以再進行推廣,下邊這段代碼是用來判斷由26個英文字母的大寫組成的字串:
var regexs = /^[A-Z]+$/;
同理,下邊這段代碼是用來判斷由26個英文字母的小寫組成的字串:
var regexs = /^[a-z]+$/;
把前幾個例子組合一下,下面的例子是用來判斷由數字和26個英文字母組成的字串:
var regexs = /^[A-Za-z0-9]+$/;
在實際應用中,除了26個字母和數字,可能還要包含底線,這個就可以簡化了,有現成的:
var regexs = /^/w+$/;
說明:
1、/w代表的含義就是26個字母的大小寫、10個數字或者底線。
學習樣本2:判斷正整數(比第一個例子前進一小步^_^)
<html>
<head>
<title>在Javascript下使用Regex的學習筆記</title>
</head>
<body>
<script language="javascript">...
var regexs = /^[1-9]+[0-9]*$/;
var result = regexs.test("1234");
alert(result);
</script>
</body>
</html>
說明:
1、既然判斷正整數,就要明白和第一個例子的區別,其實就是要把0排除在外,這就有兩種情況,如果只有一位元,那麼只能是1-9,如果是兩位元或者以上,最高位應該是1-9,後幾位任一數字都可。
2、*代表0個或者多個,和[0-9]組合在一起,就是沒有數字或者由多個數字,這樣就把一位元和多位元的情況都考慮到了。
3、網上有個教程中的例子是這樣寫的/^[0-9]*[1-9][0-9]*$/,這麼寫會把05和00045等也都算作正整數,不符合要求。
和這個例子同理,我們可以來判斷負整數:
var regexs = /^-[1-9]+[0-9]*$/;
說明:
1、這裡直接使用^-,表示字串必須以-開頭,其他的都一樣了。
剛才我們把0給去掉了,現在再加回來,來判斷非正整數:
var regexs = /^(-[1-9]+[0-9]*|0)$/;
說明:
1、非正整數就是負整數和0,所以在判斷條件中要把兩個都帶上,但是負整數是以負號開頭,而0不是,-0不符合文法,所以把兩個條件寫到一起,從邏輯上來說就會有問題。這樣我們就加了一個或的判斷條件,就是|,表示符合前一個條件的或者符合後一個條件的。
順著前一個例子繼續,我們現在來判斷整數:
var regexs = /^(-?[1-9]+[0-9]*|0)$/;
說明:
1、整數包括正整數、負整數和0,這裡需要注意的是,不能存在-0或者-0045這樣的數字。
2、這裡引用了?,?代表前面的字元出現0次或者1次,這樣意思就清晰了。