我正在尝试上传哪个文件名仅包含带符号或数字的英文字符的文件,我的问题是如果我的文件名包含带有中文字符的英文那么我需要验证它并需要显示警告消息,文件名不应该是非英文字符
任何人都可以发给我这段代码
答案 0 :(得分:4)
获取file
输入的值,并将其与正则表达式\w
匹配
但你不应该不允许这样做。您应该在上传文件后重命名该文件。用户可以上传在其OS中有效名称但在服务器OS上无效的文件。如果需要,您仍然可以将原始文件名存储为数据库。
答案 1 :(得分:0)
好的,我会出来说你应该只是将文件名与你的字母数字正则表达式匹配,如果它不匹配则抛出一般错误。但是,如果您在设置中文字符的特定警告时已停止使用,请使用以下正则表达式:
[\u4E00-\u9FFF]
敏锐的眼睛也可能认为这是日语的一个子集(因为日语称中文字符集'汉字')。
if(preg_match("[\u4E00-\u9FFF]+", $filename))
{ echo "Chinese characters found in filename."; }
答案 2 :(得分:0)
这适用于非英语字符
[^A-Za-z0-9_,.@\(\)\&\+\-\!\#\$\%\^\*\;\\\/\|\<\>'":\?\=\s]+
答案 3 :(得分:0)
使用以下代码获取文件名:
function checkname(event) {
var fullPath = document.getElementById('file').value;
var filename;
if (fullPath) {
var startIndex = (fullPath.indexOf('\\') >= 0 ? fullPath.lastIndexOf('\\') : fullPath.lastIndexOf('/'));
filename = fullPath.substring(startIndex);
if (filename.indexOf('\\') === 0 || filename.indexOf('/') === 0) {
filename = filename.substring(1);
}
}
if (!/^[a-zA-Z0-9$@$!%*?&#^-_-. +]+$/.test(filename)) {
console.log("error: "+filename);
return;
} else {
console.log("ok");
}
};
&#13;
<form action="" method='post' enctype='multipart/form-data'>
<input type='file' id='file' name='file' onchange="checkname(event);">
<input type='submit' value='upload'>
</form>
&#13;
并使用此代码进行验证:
/^[a-zA-Z0-9$@$!%*?&#^-_. +]+$/.test(filename);
如果你不想允许使用字符,请使用:
/^[a-zA-Z0-9]+$/.test(filename);