Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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 - Fatal编程技术网

Javascript 我的正则表达式怎么了?

Javascript 我的正则表达式怎么了?,javascript,regex,Javascript,Regex,我正在使用javascript测试选择上传到服务器的文件的结尾 正则表达式如下所示: (jpg | jpeg | png | gif | bmp)$ 只要文件扩展名是小写,它就可以正常工作,但是当我这样做的时候 /(jpg | jpeg | png | gif | bmp)$/i 我什么都不匹配 有人能告诉我为什么吗?我做错了什么?斜线是错的。反转它们(需要正斜杠)。反斜杠用于转义字符。斜杠错误。反转它们(需要正斜杠)。反斜杠用于转义字符。使用正斜杠作为正则表达式的边界,而不是反斜杠 /(jpg

我正在使用javascript测试选择上传到服务器的文件的结尾

正则表达式如下所示:

(jpg | jpeg | png | gif | bmp)$

只要文件扩展名是小写,它就可以正常工作,但是当我这样做的时候

/(jpg | jpeg | png | gif | bmp)$/i

我什么都不匹配


有人能告诉我为什么吗?我做错了什么?

斜线是错的。反转它们(需要正斜杠)。反斜杠用于转义字符。

斜杠错误。反转它们(需要正斜杠)。反斜杠用于转义字符。

使用正斜杠作为正则表达式的边界,而不是反斜杠

/(jpg|jpeg|png|gif|bmp)$/i

使用前斜杠作为正则表达式的边界,而不是反斜杠

/(jpg|jpeg|png|gif|bmp)$/i
您可能也应该在其中包含
,这样“foo.dfpng”、“bar.oejpg”等就不算有效:

/\.(jpg|jpeg|png|gif|bmp)$/i
您可能也应该在其中包含
,这样“foo.dfpng”、“bar.oejpg”等就不算有效:

/\.(jpg|jpeg|png|gif|bmp)$/i
使用“i”作为参数 i、 e.RegExp(“(jpg | jpeg | png | gif | bmp)$”,“i”)

使用“i”作为参数
i、 e.RegExp(“(jpg | jpeg | png | gif | bmp)$”,“i”)

以下是使用两种RegExp语法的示例代码:

var rxp = new RegExp('(jpg|jpeg|png|gif|bmp)$', 'i') var rxp2 = /(jpg|jpeg|png|gif|bmp)$/i document.write( rxp.exec('foo.jpg') + "<br/>" ) document.write( rxp.exec('foo.JPG') + "<br/>" ) document.write( rxp2.exec('foo.jpg') + "<br/>" ) document.write( rxp2.exec('foo.JPG') + "<br/>" ) var rxp=new RegExp('(jpg | jpeg | png | gif | bmp)$','i') var rxp2=/(jpg | jpeg | png | gif | bmp)$/i document.write(rxp.exec('foo.jpg')+“
”) document.write(rxp.exec('foo.JPG')+“
”) document.write(rxp2.exec('foo.jpg')+“
”) document.write(rxp2.exec('foo.JPG')+“
”)
下面是使用两种regexp语法的示例代码:

var rxp = new RegExp('(jpg|jpeg|png|gif|bmp)$', 'i') var rxp2 = /(jpg|jpeg|png|gif|bmp)$/i document.write( rxp.exec('foo.jpg') + "<br/>" ) document.write( rxp.exec('foo.JPG') + "<br/>" ) document.write( rxp2.exec('foo.jpg') + "<br/>" ) document.write( rxp2.exec('foo.JPG') + "<br/>" ) var rxp=new RegExp('(jpg | jpeg | png | gif | bmp)$','i') var rxp2=/(jpg | jpeg | png | gif | bmp)$/i document.write(rxp.exec('foo.jpg')+“
”) document.write(rxp.exec('foo.JPG')+“
”) document.write(rxp2.exec('foo.jpg')+“
”) document.write(rxp2.exec('foo.JPG')+“
”) 这很有效

var reg=/(jpg|jpeg|png|gif|bmp)$/i
document.write(reg.test('bMp'))
这很有效

var reg=/(jpg|jpeg|png|gif|bmp)$/i
document.write(reg.test('bMp'))

删除该选项,然后使用服务器端文件头测试来确定文件的类型。首先,没有JavaScript的客户端可以轻松地通过此过滤器,现在人们无法在真正需要的时候将恶意文件名更改为.jpg。它将在服务器上得到更彻底的验证,只是为了让用户提前知道。@Welbog:正如你所说,在客户端上进行测试不提供安全性。然而,它确实提高了可用性:你告诉(非恶意)用户,他们的大图像文件在等待上传10秒钟之前是无效的。例如,试图上传30MB原始图像文件的人会被告知不,他们不必等待一两年的拨号连接来告诉他们服务器拒绝了它。放下它,使用服务器端文件头测试来确定文件的类型。首先,没有JavaScript的客户端可以轻松地通过此过滤器,现在人们无法在真正需要的时候将恶意文件名更改为.jpg。它将在服务器上得到更彻底的验证,只是为了让用户提前知道。@Welbog:正如你所说,在客户端上进行测试不提供安全性。然而,它确实提高了可用性:你告诉(非恶意)用户,他们的大图像文件在等待上传10秒钟之前是无效的。例如,试图上传30MB原始图像文件的人会被告知不,他们不必等待一两年的拨号连接,就可以告诉他们服务器拒绝了它,FYIin JS,他可能只写
var regexp=/expression/i,供参考