如何使用js正則表達(dá)式驗(yàn)證文件夾名是否符合規(guī)范
背景:
git提交代碼時(shí)需要驗(yàn)證新增的文件名稱是否復(fù)合規(guī)范。具體規(guī)范如下:
全部采用小寫方式, 以中劃線分隔,用 kebab-case方式 (小寫、短橫線連接方式) 正例:
scripts / styles / components / images / utils / layouts / demo-styles / demo-scripts / img / doc
反例:script / style / demo_scripts / demoStyles / imgs / docs
【特殊】VUE 的項(xiàng)目中的 components 中的組件目錄使用PascalCase格式(與駝峰法相似,單詞大寫開頭)
因此需要驗(yàn)證普通文件名是否符合中劃線命名法(kebab-case)以及vvue的component下的文件夾 大駝峰命名法(CamelCase)
中劃線命名法(kebab-case):
思路:
1、排除文件名有空格
2、排除大寫字母
3、連接方式為其他方式比如:—— _ . 等(反推:命名中只能有小寫字母和-)
4、排除關(guān)鍵字:script style imgs docs等等
結(jié)論:
1、限定以小寫字母開頭,并且中間只包括小寫字母和-,以小寫字母結(jié)尾:/^[a-z]{1}[a-z-]+[a-z]$/。
2、排除關(guān)鍵字。
// 關(guān)鍵字 const KEYWORDS = ["script","style","imgs","docs","break","else","new","var","case","finally","return","void","catch","for","switch","while","continue","function","this","with","default","if","throw","delete","in","try","do","instranceof","typeof","abstract","enum","int","short","boolean","export","interface","static","byte","extends","long","super","char","final","native","synchronized","class","float","package","throws","const","goto","private ","transient","debugger","implements","protected ","volatile","double","import","public"] // 正則:限定以小寫字母開頭,并且中間只包括小寫字母和-,以小寫字母結(jié)尾 let reg = /^[a-z]{1}[a-z-]*?[a-z]$/; // /^[a-z]{1}[a-z-0-9]*?[a-z0-9]$/ (這個(gè)是限定以小寫字母開頭,中間小寫or數(shù)字,結(jié)尾數(shù)字。兩位數(shù)的情況下中間可以省略) // 要判斷的文件名 let fileName = `xxxxx` if(KEYWORDS.indexOf(fileName) > -1){ // 文件名是關(guān)鍵字 }else if( reg.test(fileName) ){ // 判斷:限定以小寫字母開頭,并且中間只包括小寫字母和-,以小寫字母結(jié)尾 // 符合要求 }else{ // 不符合要求 }
大駝峰命名法(CamelCase):
// 正則:限定以大寫字母開頭,并且中間只包括大寫or小寫字母,以小寫字母結(jié)尾 let reg = /^[A-Z]{1}[a-zA-Z]*?[a-z]$/; // 關(guān)鍵字 const KEYWORDS = ["script","style","imgs","docs","break","else","new","var","case","finally","return","void","catch","for","switch","while","continue","function","this","with","default","if","throw","delete","in","try","do","instranceof","typeof","abstract","enum","int","short","boolean","export","interface","static","byte","extends","long","super","char","final","native","synchronized","class","float","package","throws","const","goto","private ","transient","debugger","implements","protected ","volatile","double","import","public"] // 大寫首字母字母的關(guān)鍵字 let up_keywords = KEYWORDS.map(item=>{ return item.charAt(0).toUpperCase() + item.slice(1); }) // 要判斷的文件名 let fileName = `xxxxx` if(up_keywords.indexOf(fileName) > -1){ // 文件名是關(guān)鍵字 }else if( reg.test(fileName) ){ // 判斷:限定以小寫字母開頭,并且中間只包括小寫字母和-,以小寫字母結(jié)尾 // 符合要求 }else{ // 不符合要求 }
小駝峰命名法(lowerCamelCase):
// 正則:限定以大寫字母開頭,并且中間只包括大寫or小寫字母,以小寫字母結(jié)尾 let reg = /^[a-z]{1}[a-zA-Z]*?[a-z]$/; // 關(guān)鍵字 const KEYWORDS = ["script","style","imgs","docs","break","else","new","var","case","finally","return","void","catch","for","switch","while","continue","function","this","with","default","if","throw","delete","in","try","do","instranceof","typeof","abstract","enum","int","short","boolean","export","interface","static","byte","extends","long","super","char","final","native","synchronized","class","float","package","throws","const","goto","private ","transient","debugger","implements","protected ","volatile","double","import","public"] // 要判斷的文件名 let fileName = `xxxxx` if(KEYWORDS .indexOf(fileName) > -1){ // 文件名是關(guān)鍵字 }else if( reg.test(fileName) ){ // 判斷:限定以小寫字母開頭,并且中間只包括小寫字母和-,以小寫字母結(jié)尾 // 符合要求 }else{ // 不符合要求 }
補(bǔ)充:js正則匹配獲取文件名
//獲取文件名,不帶后綴 var file_name=file_path.replace(/(.*\/)*([^.]+).*/ig,"$2"); //獲取文件后綴 1.var FileExt=file_path.replace(/.+\./,""); 2.var fileExtension = file_path.substring(file_path.lastIndexOf('.') + 1); //截取文件后綴 var reg = /\.\w+$/; var file_name = file_path.replace(reg,'');
總結(jié)
到此這篇關(guān)于如何使用js正則表達(dá)式驗(yàn)證文件夾名是否符合規(guī)范的文章就介紹到這了,更多相關(guān)js正則驗(yàn)證文件夾名符合規(guī)范內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
innerText innerHTML的用法以及注意事項(xiàng) [推薦]
我們常常需要使用另外一些對(duì)象的屬性來實(shí)現(xiàn)動(dòng)態(tài)改變其中的文本,它們就是:innerText,outerText,innerHTML,outerHTML,千萬要注意它們的大小寫,因?yàn)殄e(cuò)一點(diǎn)您就得不到預(yù)期的效果了。2009-05-05js+h5 canvas實(shí)現(xiàn)圖片驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了js+h5 canvas實(shí)現(xiàn)圖片驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10微信小程序如何實(shí)現(xiàn)數(shù)據(jù)共享與方法共享詳解
這篇文章主要給大家介紹了關(guān)于微信小程序如何實(shí)現(xiàn)數(shù)據(jù)共享與方法共享的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01js canvas實(shí)現(xiàn)QQ撥打電話特效
這篇文章主要為大家詳細(xì)介紹了js canvas實(shí)現(xiàn)QQ撥打電話特效,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05JS表單提交驗(yàn)證、input(type=number) 去三角 刷新驗(yàn)證碼
在進(jìn)行表單提交時(shí),需要對(duì)輸入框和文本域等的value的合理性進(jìn)行驗(yàn)證,可以編寫form的onSubmit事件,下面給大家介紹js表單提交驗(yàn)證input(type=number) 去三角 刷新驗(yàn)證碼注意事項(xiàng),一起看看吧2017-06-06JavaScript模擬可展開、拖動(dòng)與關(guān)閉的聊天窗口實(shí)例
這篇文章主要介紹了JavaScript模擬可展開、拖動(dòng)與關(guān)閉的聊天窗口,實(shí)例分析了javascript實(shí)現(xiàn)可拖動(dòng)的div層相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05