我想使用這個開源圖片上傳:https://github.com/blueimp如何使用正則表達式來測試文件名有特殊字符
文檔說的功能相匹配的文件類型可以用來匹配文件名字也。
任何人都可以看到的方式來使用這個在文件名匹配,限制特殊字符?
以下是與我特別要排除的字符相匹配的RegEx。我試圖阻止最終用戶在文件名中使用特殊字符,而不是僅僅依賴於對它們的培訓。在這種情況下,英語是唯一關心的問題。
[&[email protected]#$^*()_+=/:?;\\|<>"',!%]
這是來源代碼(開源),將評估它的snipit。完整的代碼可在上面的鏈接中找到。
// The File Upload Validation plugin extends the fileupload widget
// with file validation functionality:
$.widget('blueimp.fileupload', $.blueimp.fileupload, {
options: {
/*
// The regular expression for allowed file types, matches
// against either file type or file name:
acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
// The maximum allowed file size in bytes:
maxFileSize: 10000000, // 10 MB
// The minimum allowed file size in bytes:
minFileSize: undefined, // No minimal file size
// The limit of files to be uploaded:
maxNumberOfFiles: 10,
*/
// Function returning the current number of files,
// has to be overriden for maxNumberOfFiles validation:
getNumberOfFiles: $.noop,
// Error and info messages:
messages: {
maxNumberOfFiles: 'Maximum number of files exceeded',
acceptFileTypes: 'File type not allowed',
maxFileSize: 'File is too large',
minFileSize: 'File is too small'
}
},
processActions: {
validate: function (data, options) {
if (options.disabled) {
return data;
}
var dfd = $.Deferred(),
settings = this.options,
file = data.files[data.index],
fileSize;
if (options.minFileSize || options.maxFileSize) {
fileSize = file.size;
}
if ($.type(options.maxNumberOfFiles) === 'number' &&
(settings.getNumberOfFiles() || 0) + data.files.length >
options.maxNumberOfFiles) {
file.error = settings.i18n('maxNumberOfFiles');
} else if (options.acceptFileTypes &&
!(options.acceptFileTypes.test(file.type) ||
options.acceptFileTypes.test(file.name))) {
file.error = settings.i18n('acceptFileTypes');
} else if (fileSize > options.maxFileSize) {
file.error = settings.i18n('maxFileSize');
} else if ($.type(fileSize) === 'number' &&
fileSize < options.minFileSize) {
file.error = settings.i18n('minFileSize');
} else {
delete file.error;
}
if (file.error || data.files.error) {
data.files.error = true;
dfd.rejectWith(this, [data]);
} else {
dfd.resolveWith(this, [data]);
}
return dfd.promise();
}
}
});
編輯:有些東西我曾嘗試:
感謝您的快速反應。我在這裏試過的一些東西: 許多這些返回匹配,即使它名稱之前是一個無效的字符。 請參閱http://regexr.com/3be9o 我不希望asdf & ghjik.jpg匹配有效。
我想我真的想要一個-Z A-Z 0-9 - _
[^&[email protected]#$^*()_+=/:?;\\|<>"',!%]([\w]+\-*[\w]+)+(\.|\/)(gif|jpe?g|png)
([^&[email protected]#$^*()_+=/:?;\\|<>"',!%])?([\w]+\-*[\w]+)+(\.|\/)(gif|jpe?g|png)
([\w]+\-+[\w]+)+(\.|\/)(gif|jpe?g|png)
[^&[email protected]#$^*()_+=/:?;\\|<>"',!%]*(\.jpg)|[^&[email protected]#$^*()_+=/:?;\\|<>"',!%]*(\.png)|
[^&[email protected]#$^*()_+=/:?;\\|<>"',!%]*(\.gif)|[^&[email protected]#$^*()_+=/:?;\\|<>"',!%]*(\.jpeg)
而是不允許具體的事情的,指定哪些是允許的。 – Nit
如果它只是正則表達式,'[A-Z,a-z,0-9]'只允許文件名;否則,輸出錯誤。如果您還想包含某些字符,例如句號,連字符,下劃線,只需添加轉義字符'\。,\ _,\ - '。我不確定JavaScript中的最佳方式。你爲什麼不包括你所嘗試過的? –
@ ILMostro_7該字符組還將包含逗號',',因爲這不是字符組內的分隔符。那些沒有分隔符,它只是一堆字符。另外,不需要轉義下劃線'_',如果它是字符組中的最後一個東西,則不需要轉義短劃線'-'。這給了'[a-zA-Z0-9 \ ._-]'。 – simbabque