如何使用js正則表達(dá)式驗證文件夾名是否符合規(guī)范
背景:
git提交代碼時需要驗證新增的文件名稱是否復(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 的項目中的 components 中的組件目錄使用PascalCase格式(與駝峰法相似,單詞大寫開頭)
因此需要驗證普通文件名是否符合中劃線命名法(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]$/ (這個是限定以小寫字母開頭,中間小寫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{
// 不符合要求
}補充: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á)式驗證文件夾名是否符合規(guī)范的文章就介紹到這了,更多相關(guān)js正則驗證文件夾名符合規(guī)范內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
innerText innerHTML的用法以及注意事項 [推薦]
我們常常需要使用另外一些對象的屬性來實現(xiàn)動態(tài)改變其中的文本,它們就是:innerText,outerText,innerHTML,outerHTML,千萬要注意它們的大小寫,因為錯一點您就得不到預(yù)期的效果了。2009-05-05
微信小程序如何實現(xiàn)數(shù)據(jù)共享與方法共享詳解
這篇文章主要給大家介紹了關(guān)于微信小程序如何實現(xiàn)數(shù)據(jù)共享與方法共享的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-01-01
JS表單提交驗證、input(type=number) 去三角 刷新驗證碼
在進(jìn)行表單提交時,需要對輸入框和文本域等的value的合理性進(jìn)行驗證,可以編寫form的onSubmit事件,下面給大家介紹js表單提交驗證input(type=number) 去三角 刷新驗證碼注意事項,一起看看吧2017-06-06
JavaScript模擬可展開、拖動與關(guān)閉的聊天窗口實例
這篇文章主要介紹了JavaScript模擬可展開、拖動與關(guān)閉的聊天窗口,實例分析了javascript實現(xiàn)可拖動的div層相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下2015-05-05

