Javascript正则表达式在Firefox中不起作用

时间:2009-11-04 01:37:52

标签: javascript regex validation

此正则表达式在Firefox中失败但在IE中有效。

function validate(x) {
   return /.(jpeg|jpg)$/ig.test(x);
}

有人可以解释原因吗?

3 个答案:

答案 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中出现。

至于“它如何运作” - 正则表达式会变得非常棘手 - 但我会解释上述模式的细节:

  • 斜杠 / 用于分隔模式
  • 具有“任何非空白字符”的特殊含义 - 将其写为 \。强制该模式只匹配一个完整的停止
  • ()表示一个集合(它变得更复杂,但涵盖了这种用法)
  • | 表示'或'
  • $ 表示字符串的结尾(或多行文字中行的结尾)
  • 第二个斜杠后的 i 表示'不区分大小写'
  • g 表示“全局” - 在这种情况下没有多大意义,所以我删除了它。

所以..

/\.(jpeg|jpg)$/i

表示“以.jpeg或.jpg结尾的字符串 - 忽略大小写”

所以... .JPEG,.jpg,.JpeG等...现在都将通过......

答案 2 :(得分:2)

该函数使用regular expression模式.(jpeg|jpg)$来测试字符串。看起来的目的是验证文件名,以确保它们的扩展名为jpgjpeg

正如James Bailey指出的那样,有一个错误,即应该用反斜杠来逃避这段时间。正则表达式中的句点将匹配任何字符。因此,如图所示,该模式将匹配imagexjpgimage.jpg