此正则表达式在Firefox中失败但在IE中有效。
function validate(x) {
return /.(jpeg|jpg)$/ig.test(x);
}
有人可以解释原因吗?
答案 0 :(得分:3)
在正则表达式中,“。”本身意味着“任何角色”。你的意思是 ”\。”是指“期间”?
答案 1 :(得分:3)
如果您只使用文件名进行测试,那么为全局设置'g'标志没有多大意义,因为无论如何您在字符串末尾进行匹配 - 我运行了以下内容:
function validate(x) {
return /\.(jpeg|jpg)$/i.test(x);
}
var imagename = 'blah.jpg';
alert (validate(imagename)); // should be true
imagename = 'blah.jpeg';
alert (validate(imagename)); // should be true
imagename = 'blah.png';
alert (validate(imagename)); // should be false
所有三项测试均按预期在FF中出现。
至于“它如何运作” - 正则表达式会变得非常棘手 - 但我会解释上述模式的细节:
所以..
/\.(jpeg|jpg)$/i
表示“以.jpeg或.jpg结尾的字符串 - 忽略大小写”
所以... .JPEG,.jpg,.JpeG等...现在都将通过......
答案 2 :(得分:2)
该函数使用regular expression模式.(jpeg|jpg)$
来测试字符串。看起来的目的是验证文件名,以确保它们的扩展名为jpg
或jpeg
。
正如James Bailey指出的那样,有一个错误,即应该用反斜杠来逃避这段时间。正则表达式中的句点将匹配任何字符。因此,如图所示,该模式将匹配imagexjpg
和image.jpg
。