我有以下JavaScript,禁止将文件命名为特定的名称,并禁止某些字符在名称中出现 where :
var file = 'somefile';
var contain = ['"', '*', ':', '<', '>', '?', '\\', '/', '|', '+', '[', ']'];
var fullname = ['AUX', 'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7',
'COM8', 'COM9', 'CON', 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7',
'LPT8', 'LPT9', 'NUL', 'PRN'];
if(fullname.indexOf(file.toUpperCase()) >= 0)
{
alert('Your file must not be named any of these words:\n\n' +
fullname.join(' '));
return;
}
if(/* file contains any chars in contain[] */)
{
alert('Your file name must not contain any of these characters:\n\n' +
contain.join(' '));
return;
}
我想知道如何检查file
是否包含contain
数组中的任何项目。
我可以使用for
循环,如下所示:
for(var i = 0; i < contain.length; i++)
if(file.indexOf(contain[i]) >= 0)
...
但是为此使用循环似乎“错误”。
是否有使用vanilla JavaScript执行此操作的内置函数?
答案 0 :(得分:2)
如果您正在使用.indexOf()
,则循环是唯一的方法。
但是,您也可以使用正则表达式:
var contain = /["*:<>?\\/|+\[\]]/;
var fullname = /^(AUX|COM1|...)$/i; // NB: "i" flag for case insensitive
if (contain.test(file)) {
...
}
if (fullname.test(file)) {
...
}
这应该非常有效,因为正则表达式将在JS解释器中的本机代码中处理。
答案 1 :(得分:0)
你有没有考虑过这个正则表达式?
你的代码就像这样:
var file = 'somefile';
document.body.style.background = "#4f4";
var contain = ['"', '*', ':', '<', '>', '?', '\\', '/', '|', '+', '[', ']'];
var fullname = ['AUX', 'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7',
'COM8', 'COM9', 'CON', 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7',
'LPT8', 'LPT9', 'NUL', 'PRN'];
if(fullname.indexOf(file.toUpperCase()) >= 0)
{
alert('Your file must not be named any of these words:\n\n' +
fullname.join(' '));
return;
}
// If you want to keep the invalid characters as a array:
var containAsString = contain.join("").replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
// the reg expression will look like "[;\.]"
var re = new RegExp("["+ containAsString +"]");
if(re.test(file))
{
alert('Your file name must not contain any of these characters:\n\n' +
contain.join(' '));
return;
}
编辑:接受的答案显然更清晰但至少这个答案现在尊重SO政策