摘要:記錄一些項目中用到的正則工具,將持續(xù)更新如果對中的正則不太了解,可以參考一下中正則表達式必知必會字符串操作去除字符串兩邊的空格編碼對等字符轉(zhuǎn)義,避免攻擊找出重復最多的字符把字符串轉(zhuǎn)換為數(shù)組首先進行排序,這樣結(jié)果會把相同的字符放在一起,然后再
記錄一些項目中用到的正則工具,將持續(xù)更新...
如果對JS中的正則不太了解,可以參考一下JS 中正則表達式必知必會
1. 字符串操作 1.1 去除字符串兩邊的空格 trimString.prototype.trim = function() { return this.replace(/(^s+)|(s+$)/g, "") }1.2 HTML編碼對< > " " &等字符轉(zhuǎn)義,避免XSS攻擊
function htmlEncode(str) { return str.replace(/[<>""&]/g, function(rs) { switch (rs) { case "<": return "<" case ">": return ">" case "&": return "&" case """: return "'" case """: return """ } }) }1.3 找出重復最多的字符
let str = "asss23sjdssskssa7lsssdkjsssdss" const arr = str.split(/s*/) // 把字符串轉(zhuǎn)換為數(shù)組 const str2 = arr.sort().join("") // 首先進行排序,這樣結(jié)果會把相同的字符放在一起,然后再轉(zhuǎn)換為字符串 let value = "" let index = 0 str2.replace(/(w)1*/g, function($0, $1) { // 匹配字符 if (index < $0.length) { index = $0.length // index是出現(xiàn)次數(shù) value = $1 // value是對應字符 } }) console.log(`最多的字符: ${value} ,重復的次數(shù): ${index}`) // s 171.4 數(shù)字格式化,1234567890 -> 1,234,567,890
下面簡單分析下正則/B(?=(d{3})+(?!d))/g:
/B(?=(d{3})+(?!d))/g:正則匹配非單詞邊界B,邊界后面必須跟著(d{3})+(?!d)
(d{3})+:必須是1個或多個的3個連續(xù)數(shù)字
(?!d):第2步中的3個數(shù)字不允許后面跟著數(shù)字
(d{3})+(?!d):所以匹配的邊界后面必須跟著3*n(n>=1)的數(shù)字
最終把匹配到的所有邊界換成,即可
const numFormat = str => str.replace(/B(?=(d{3})+(?!d))/g, ",")1.5 手機號中間四位換*
手機號中間4位數(shù)換成*
const validateMobile = str => /^[1][0-9]{10}$/.test(str) && str.replace(/(d{3})(d{4})(d{4})/, (rs, $1, $2, $3) => `${$1}****${$3}`)1.6 取URL中query到一個對象中
function getUrlParam(str) { const result = {} const valid = /(https?|ftp)://[w-_]+(.[w-_]+)+([w-.,@?^=%&:/~+#]*[w-@?^=%&/~+#])?/.exec(str) if (!valid) return const [rs, $1, $2, $3] = valid $3.match(/[a-zA-Z_]+=[^=&?]*/g).forEach(val => val.replace(/^(w+)=(w*)$/, ($0, $1, $2) => { result[$1] = $2 }) ) return result } getUrlParam("https://www.baidu.com?name=jawil&age=23&d=") // {name: "jawil", age: "23", d: ""}1.7 駝峰轉(zhuǎn)下劃線
"componentMapModelRegistry".match(/^[a-z][a-z0-9]+|[A-Z][a-z0-9]*/g).join("_").toLowerCase(); // component_map_model_registry1.8 下劃線轉(zhuǎn)駝峰
"component_map_model_registry".replace(/_(w)/g, (str, letter) => letter.toUpperCase()) // componentMapModelRegistry1.9 獲取文件名信息,提取文件名和文件名后綴
export const getFileInfo = fileName => { const fileRe = /(.+)(.[a-z0-9]+)$/i try { const result = fileRe.exec(fileName) return { name: result[1], type: result[2] } } catch (e) { return null } }2. 驗證
用于驗證時,通常需要在前后分別加上^、$、,以匹配整個待驗證字符串
2.1 常用正則驗證function checkStr(str, type) { switch (type) { case "phone": //手機號碼 return /^1d{10}$/.test(str) case "tel": // 座機 return /^(0d{2,3}-d{7,8})(-d{1,4})?$/.test(str) case "card": // 身份證 return /^d{15}|d{18}$/.test(str) case "pwd": // 密碼以字母開頭,長度在6~18之間,只能包含字母、數(shù)字和下劃線 return /^[a-zA-Z]w{5,17}$/.test(str) case "postal": // 郵政編碼 return /[1-9]d{5}(?!d)/.test(str) case "QQ": // QQ號 5-11位數(shù)字 return /^[1-9]d{4,10}$/.test(str) case "email": // 郵箱 return /^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$/.test(str) case "money": // 金額(小數(shù)點2位) return /^d*(?:.d{0,2})?$/.test(str) case "URL": // 網(wǎng)址 return /(https?|ftp)://[w-_]+(.[w-_]+)+([w-.,@?^=%&:/~+#]*[w-@?^=%&/~+#])?/.test(str) case "IP": // IP return /((?:(?:25[0-5]|2[0-4]d|[01]?d?d).){3}(?:25[0-5]|2[0-4]d|[01]?d?d))/.test(str) case "day": // 一個月的31天 01-09和1~31 return /^((0?[1-9])|(([12])[0-9])|30|31)$/.test(str) case "month": // 一年的12個月 01-09和1-12 return /^(0?[1-9]|1[0-2])$/.test(str) case "date": // 日期時間 return /^(d{4})-(d{2})-(d{2}) (d{2})(?::d{2}|:(d{2}):(d{2}))$/.test(str) || /^(d{4})-(d{2})-(d{2})$/.test(str) case "integer": // 整數(shù) 正整數(shù)或負整數(shù) return /^-?d+$/.test(str) case "decimal": // 小數(shù) return /^(-?d+)(.d+)?$/.test(str) case "english": // 英文 return /^[a-zA-Z]+$/.test(str) case "chinese": // 中文 return /^[u4E00-u9FA5]+$/.test(str) case "cname": // 中文姓名 2-4位漢字 return /^[u4E00-u9FA5]{2,4}$/.test(str) case "lower": // 小寫 return /^[a-z]+$/.test(str) case "upper": // 大寫 return /^[A-Z]+$/.test(str) case "HTML": // HTML標記 return /<("[^"]*"|"[^"]*"|[^"">])*>/.test(str) default: throw new Error("檢驗出錯 in function checkStr") } }2.2 驗證是否是合法URL
function validateURL(textval) { const urlregex = /^(https?|ftp)://([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+.)*[a-zA-Z0-9-]+.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(/($|[a-zA-Z0-9.,?"+&%$#=~_-]+))*$/ return urlregex.test(textval) }
網(wǎng)上的帖子大多深淺不一,甚至有些前后矛盾,在下的文章都是學習過程中的總結(jié),如果發(fā)現(xiàn)錯誤,歡迎留言指出~
參考:
JavaScript正則進階之路——活學妙用奇淫正則表達式
js正則驗證方法大全
javascript 總結(jié)(RegExp篇)
PS:歡迎大家關(guān)注我的公眾號【前端下午茶】,一起加油吧~
另外可以加入「前端下午茶交流群」微信群,長按識別下面二維碼即可加我好友,備注加群,我拉你入群~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/107452.html
摘要:正則大法好,正則大法好,正則大法好,重要的事情說三遍。第二部分,這個部分是整個表達式的關(guān)鍵部分。學習正則如果還沒有系統(tǒng)學習正則表達式,這里提供一些網(wǎng)上經(jīng)典的教程供大家學習。正則表達式使用單個字符串來描述匹配一系列匹配某個句法規(guī)則的字符串。 原文收錄在我的 GitHub博客 (https://github.com/jawil/blog) ,喜歡的可以關(guān)注最新動態(tài),大家一起多交流學習,共同...
摘要:正則大法好,正則大法好,正則大法好,重要的事情說三遍。第二部分,這個部分是整個表達式的關(guān)鍵部分。學習正則如果還沒有系統(tǒng)學習正則表達式,這里提供一些網(wǎng)上經(jīng)典的教程供大家學習。正則表達式使用單個字符串來描述匹配一系列匹配某個句法規(guī)則的字符串。 原文收錄在我的 GitHub博客 (https://github.com/jawil/blog) ,喜歡的可以關(guān)注最新動態(tài),大家一起多交流學習,共同...
閱讀 853·2021-11-24 09:38
閱讀 1085·2021-10-08 10:05
閱讀 2577·2021-09-10 11:21
閱讀 2800·2019-08-30 15:53
閱讀 1827·2019-08-30 15:52
閱讀 1964·2019-08-29 12:17
閱讀 3418·2019-08-29 11:21
閱讀 1609·2019-08-26 12:17