Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:当文件名中有汉字时抛出错误_Javascript_Regex_File Upload_Filenames_Chinese Locale - Fatal编程技术网

Javascript:当文件名中有汉字时抛出错误

Javascript:当文件名中有汉字时抛出错误,javascript,regex,file-upload,filenames,chinese-locale,Javascript,Regex,File Upload,Filenames,Chinese Locale,嗨,当我在使用Javascript的文件名中看到中文字符时,我想抛出一个错误。我的代码抛出一个“预期的十六进制数字”错误。到目前为止,我有以下代码: if(document.f1.Attachment.value.match(""/[\u4e00-\u9fff]|[\u3400-\u4dbf]|[\u{20000}-\u{2a6df}]|[\u{2a700}-\u{2b73f}]|[\u{2b740}-\u{2b81f}]|[\u{2b820}-\u{2ceaf}]|[\uf900-\ufaff

嗨,当我在使用Javascript的文件名中看到中文字符时,我想抛出一个错误。我的代码抛出一个“预期的十六进制数字”错误。到目前为止,我有以下代码:

if(document.f1.Attachment.value.match(""/[\u4e00-\u9fff]|[\u3400-\u4dbf]|[\u{20000}-\u{2a6df}]|[\u{2a700}-\u{2b73f}]|[\u{2b740}-\u{2b81f}]|[\u{2b820}-\u{2ceaf}]|[\uf900-\ufaff]|[\u3300-\u33ff]|[\ufe30-\ufe4f]|[\uf900-\ufaff]|[\u{2f800}-\u{2fa1f}]""))
{
alert('Attachment cannot contain Chinese characters');
}

我正在阅读并理解这是因为\u,但我不明白如何修复此问题

首先,应该从正则表达式文本的两端删除
。在JS中,您需要使用普通的
/…/
,不使用
包装构造,使其能够正常工作,并将其解析为正则表达式

接下来,您的模式包含符合ECMAScript 6+标准的
\u{XXXXX}
符号,并且需要
u
修饰符才能在兼容的JS环境中工作。因此,在ES6中,这是一个有效的解决方案:

.match(/[\u4e00-\u9fff]|[\u3400-\u4dbf]|[\u{20000}-\u{2a6df}]|[\u{2a700}-\u{2b73f}]|[\u{2b740}-\u{2b81f}]|[\u{2b820}-\u{2ceaf}]|[\uf900-\ufaff]|[\u3300-\u33ff]|[\ufe30-\ufe4f]|[\uf900-\ufaff]|[\u{2f800}-\u{2fa1f}]/u)
要使其在ES5(较旧的浏览器)中工作,您需要:

JSES5演示:

if(“中文.match(/[\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff]|(?:[\uD840-\uD868\uD86A-\uD872][\uDC00-\uDFFF]|\uD869[\uDC00-\uDC00-\uDFFF]|\uddf{
log(“ES5:检测到中文!”);

}
您将所有内容都包装在
中,而不是
。不,您不需要双引号,请从两端删除
。此外,还有
\u{2b820}
,因此需要使用
u
修饰符。这意味着,它是一个用于ES6JS环境的正则表达式<若(文件.f1.文件.附件.文件.f1.文件.附件..价值.文件.若(文件.文件.f1.文件.f1.文件.1.文件.1.文件.1.1.附件.文件.1.附件..值.数字.若若(文件.文件.f1.文件.1.文件.1.代码.代码.代码.若若然然然然然然然然然然然然然上述上述上述上述两名人士(文件)若若若若若(文件.上述)若若(文件.若)若(文件.若)若(文件.文件.文件.文件.文件.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.......900-\ufaff]|[\u{2f800}-\u{2fa1f}]/u))。看,它在FF和Chrome中工作。如果文本是某个字符串文字的一部分,您可能需要双重转义
\
@WiktorStribiżew:我看到您的小提琴了,效果非常好。正是我想要的。但似乎对我不起作用。我一个接一个地添加以检查它在哪里被破坏,现在抛出的javascript错误似乎是因为{and}符号。有什么关于为什么会这样的建议吗?试试看<代码>/[\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff]|(?:[\uD840-\uD868\uD86A-\uD872][\uDC00-\uDFFF]|\uD869[\uDC00-\UDDF\uDF00-\uDFFF]|\uD873[\uDC00-\uDC00-\uDFFF]|这太完美了!正是我想要的。谢谢你的帮助!
.match(/[\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff]|(?:[\uD840-\uD868\uD86A-\uD872][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD873[\uDC00-\uDEAF]|\uD87E[\uDC00-\uDE1F])/)