今天git上clone了一个vue-element-admin
玩,自己编译后出现报错在正则表达式中出现了未预料的控制字符:\x00, \xff]/ig
:
然后找到src/utils/index.js
第84行:
查看报错信息中给出的URL(https://eslint.org/docs/rules/no-control-regex), 发现ESLint
有个规则:
禁止正则表达式中的控制字符(no-control-regex)(disallow control characters in regular expressions)
控制字符是ASCII范围0-31中的特殊,不可见字符。这些字符在JavaScript字符串中很少使用,因此包含这些字符的正则表达式很可能是错误的。
此处需要禁用ESLint
对该语句的校验,网上有说法是将webpack
中的配置文件中启用ESLint
校验的代码注释掉或者将编辑器中的ESLint
插件卸掉,这么做是不是也太简单粗暴了?不启用ESLint
校验,编写代码犹如野马脱缰,真可以让我们的某些同行“天马行空”。而此处ESLint
不过是有点类似一个杀毒过猛的杀毒软件,如此因噎废食,只能呵呵了。
我这里想要在代码中局部禁用这条规则,有多种方法:
/**
* get getByteLen
* @param {Sting} val input value
* @returns {number} output value
*/
export function getByteLen(val) {
/* eslint-disable no-control-regex */ // 在本函数中禁用no-control-regex规则
let len = 0
for (let i = 0; i < val.length; i++) {
if (val[i].match(/[^\x00-\xff]/ig) != null) {
len += 1
} else { len += 0.5 }
}
return Math.floor(len)
}
或者
/**
* get getByteLen
* @param {Sting} val input value
* @returns {number} output value
*/
export function getByteLen(val) {
let len = 0
for (let i = 0; i < val.length; i++) {
if (val[i].match(/[^\x00-\xff]/ig) != null) {// eslint-disable-line // 直接在本行中禁用eslint
len += 1
} else { len += 0.5 }
}
return Math.floor(len)
}
再或者
/**
* get getByteLen
* @param {Sting} val input value
* @returns {number} output value
*/
export function getByteLen(val) {
let len = 0
for (let i = 0; i < val.length; i++) {
// eslint-disable-next-line // 在下一行禁用eslint,类似上一种方法,只是写的位置不同罢了
if (val[i].match(/[^\x00-\xff]/ig) != null) {
len += 1
} else { len += 0.5 }
}
return Math.floor(len)
}
亲测可用!