如何使用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)文章
JS的運(yùn)行機(jī)制之事件循環(huán)機(jī)制示例詳解
事件循環(huán)是JavaScript實(shí)現(xiàn)異步編程的核心,通過單線程執(zhí)行模型協(xié)調(diào)同步代碼、回調(diào)隊(duì)列、異步事件及微任務(wù)和宏任務(wù),這篇文章主要介紹了JS運(yùn)行機(jī)制之事件循環(huán)機(jī)制的相關(guān)資料,需要的朋友可以參考下2025-07-07
詳解JavaScript對(duì)象轉(zhuǎn)原始值
這篇文章主要為大家介紹了vue組件通信的幾種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-12-12
js關(guān)于getImageData跨域問題的解決方法
這篇文章主要為大家詳細(xì)介紹了js關(guān)于getImageData跨域問題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
JS模擬自動(dòng)點(diǎn)擊的簡(jiǎn)單實(shí)例
這篇文章介紹了JS模擬自動(dòng)點(diǎn)擊的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下2013-08-08
基于JS實(shí)現(xiàn)網(wǎng)頁中的選項(xiàng)卡(兩種方法)
這篇文章主要介紹了用js語句實(shí)現(xiàn)網(wǎng)頁中的選項(xiàng)卡(兩種方法),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-06-06
用javascript實(shí)現(xiàn)無刷新更新數(shù)據(jù)的詳細(xì)步驟 asp
用javascript實(shí)現(xiàn)無刷新更新數(shù)據(jù)的詳細(xì)步驟 asp...2006-12-12
使用百度地圖實(shí)現(xiàn)地圖網(wǎng)格的示例
下面小編就為大家分享一篇使用百度地圖實(shí)現(xiàn)地圖網(wǎng)格的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-02-02
JavaScript實(shí)現(xiàn)滑塊補(bǔ)圖驗(yàn)證碼效果
這篇文章主要給大家介紹了JavaScript如何實(shí)現(xiàn)滑塊補(bǔ)圖驗(yàn)證碼效果,文章通過代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以參考閱讀下2023-07-07

