一個正則表達式能夠由簡單的字符構成,好比 /abc/,也能夠是簡單和特殊字符的組合,好比 /ab*c/ 。其中特殊字符也被稱爲元字符,在正則表達式中是具備特殊意義的專用符號,如 ^ 、$ 、+ 等。正則表達式
特殊字符很是多,能夠參考: ide
測試
jQuery 手冊:正則表達式部分ui
2. 邊界符this
正則表達式中的邊界符(位置符)用來提示字符所處的位置,主要有兩個字符spa
邊界符 | 說明 |
---|---|
^ | 表示匹配行首的文本(以誰開始) |
$ | 表示匹配行尾的文本(以誰結束) |
若是 ^和 $ 在一塊兒,表示必須是精確匹配。regexp
var rg = /abc/; // 正則表達式裏面不須要加引號 無論是數字型仍是字符串型
// /abc/ 只要包含有abc這個字符串返回的都是true
console.log(rg.test('abc'));
console.log(rg.test('abcd'));
console.log(rg.test('aabcd'));
console.log('---------------------------');
var reg = /^abc/;
console.log(reg.test('abc')); // true
console.log(reg.test('abcd')); // true
console.log(reg.test('aabcd')); // false
console.log('---------------------------');
var reg1 = /^abc$/; // 精確匹配 要求必須是 abc字符串才符合規範
console.log(reg1.test('abc')); // true
console.log(reg1.test('abcd')); // false
console.log(reg1.test('aabcd')); // false
console.log(reg1.test('abcabc')); // false
字符類表示有一系列字符可供選擇,只要匹配其中一個就能夠了。全部可供選擇的字符都放在方括號內。blog
表示有一系列字符可供選擇,只要匹配其中一個就能夠了ip
var rg = /[abc]/; // 只要包含有a 或者 包含有b 或者包含有c 都返回爲true
console.log(rg.test('andy'));//true
console.log(rg.test('baby'));//true
console.log(rg.test('color'));//true
console.log(rg.test('red'));//false
var rg1 = /^[abc]$/; // 三選一 只有是a 或者是 b 或者是c 這三個字母才返回 true
console.log(rg1.test('aa'));//false
console.log(rg1.test('a'));//true
console.log(rg1.test('b'));//true
console.log(rg1.test('c'));//true
console.log(rg1.test('abc'));//true
----------------------------------------------------------------------------------
var reg = /^[a-z]$/ //26個英文字母任何一個字母返回 true - 表示的是a 到z 的範圍
console.log(reg.test('a'));//true
console.log(reg.test('z'));//true
console.log(reg.test('A'));//false
-----------------------------------------------------------------------------------
//字符組合
var reg1 = /^[a-zA-Z0-9]$/; // 26個英文字母(大寫和小寫均可以)任何一個字母返回 true
------------------------------------------------------------------------------------
//取反 方括號內部加上 ^ 表示取反,只要包含方括號內的字符,都返回 false 。
var reg2 = /^[^a-zA-Z0-9]$/;
console.log(reg2.test('a'));//false
console.log(reg2.test('B'));//false
console.log(reg2.test(8));//false
console.log(reg2.test('!'));//true
量詞符用來設定某個模式出現的次數。字符串
量詞 | 說明 |
---|---|
* | 重複0次或更屢次 |
+ | 重複1次或更屢次 |
? | 重複0次或1次 |
{n} | 重複n次 |
{n,} | 重複n次或更屢次 |
{n,m} | 重複n到m次 |
功能需求:
若是用戶名輸入合法, 則後面提示信息爲: 用戶名合法,而且顏色爲綠色
若是用戶名輸入不合法, 則後面提示信息爲: 用戶名不符合規範, 而且顏色爲紅色
分析:
用戶名只能爲英文字母,數字,下劃線或者短橫線組成, 而且用戶名長度爲6~16位.
首先準備好這種正則表達式模式/$[a-zA-Z0-9-_]{6,16}^/
當表單失去焦點就開始驗證.
若是符合正則規範, 則讓後面的span標籤添加 right類.
若是不符合正則規範, 則讓後面的span標籤添加 wrong類.
<input type="text" class="uname"> <span>請輸入用戶名</span>
<script>
// 量詞是設定某個模式出現的次數
var reg = /^[a-zA-Z0-9_-]{6,16}$/; // 這個模式用戶只能輸入英文字母 數字 下劃線 中劃線
var uname = document.querySelector('.uname');
var span = document.querySelector('span');
uname.onblur = function() {
if (reg.test(this.value)) {
console.log('正確的');
span.className = 'right';
span.innerHTML = '用戶名格式輸入正確';
} else {
console.log('錯誤的');
span.className = 'wrong';
span.innerHTML = '用戶名格式輸入不正確';
}
}
</script>
1.大括號 量詞符. 裏面表示重複次數
2.中括號 字符集合。匹配方括號中的任意字符.
3.小括號表示優先級
預約義類指的是某些常見模式的簡寫方式.
案例:驗證座機號碼
var reg = /^\d{3}-\d{8}|\d{4}-\d{7}$/;
var reg = /^\d{3,4}-\d{7,8}$/;
表單驗證案例
//手機號驗證:/^1[3|4|5|7|8][0-9]{9}$/;
//驗證經過與不經過更換元素的類名與元素中的內容
if (reg.test(this.value)) {
// console.log('正確的');
this.nextElementSibling.className = 'success';
this.nextElementSibling.innerHTML = '<i class="success_icon"></i> 恭喜您輸入正確';
} else {
// console.log('不正確');
this.nextElementSibling.className = 'error';
this.nextElementSibling.innerHTML = '<i class="error_icon"></i>格式不正確,請重新輸入 ';
}
//QQ號驗證: /^[1-9]\d{4,}$/;
//暱稱驗證:/^[\u4e00-\u9fa5]{2,8}$/
//驗證經過與不經過更換元素的類名與元素中的內容 ,將上一步的匹配代碼進行封裝,屢次調用便可
function regexp(ele, reg) {
ele.onblur = function() {
if (reg.test(this.value)) {
// console.log('正確的');
this.nextElementSibling.className = 'success';
this.nextElementSibling.innerHTML = '<i class="success_icon"></i> 恭喜您輸入正確';
} else {
// console.log('不正確');
this.nextElementSibling.className = 'error';
this.nextElementSibling.innerHTML = '<i class="error_icon"></i> 格式不正確,請重新輸入 ';
}
}
};
//密碼驗證:/^[a-zA-Z0-9_-]{6,16}$/
//再次輸入密碼只需匹配與上次輸入的密碼值 是否一致
replace() 方法能夠實現替換字符串操做,用來替換的參數能夠是一個字符串或是一個正則表達式。
var str = 'andy和red';
var newStr = str.replace('andy', 'baby');
console.log(newStr)//baby和red
//等同於 此處的andy能夠寫在正則表達式內
var newStr2 = str.replace(/andy/, 'baby');
console.log(newStr2)//baby和red
//所有替換
var str = 'abcabc'
var nStr = str.replace(/a/,'哈哈')
console.log(nStr) //哈哈bcabc
//所有替換g
var nStr = str.replace(/a/a,'哈哈')
console.log(nStr) //哈哈bc哈哈bc
//忽略大小寫i
var str = 'aAbcAba';
var newStr = str.replace(/a/gi,'哈哈')//"哈哈哈哈bc哈哈b哈哈"
案例:過濾敏感詞彙
<textarea name="" id="message"></textarea> <button>提交</button>
<div></div>
<script>
var text = document.querySelector('textarea');
var btn = document.querySelector('button');
var div = document.querySelector('div');
btn.onclick = function() {
div.innerHTML = text.value.replace(/激情|gay/g, '**');
}
</script>