2011-06-28 82 views
-1

这是工作不工作的罚款如果我写JPG | PNG | JPEG |这里GIF ...正则表达式在JavaScript

if (!(ext && /^(jpg|png|jpeg|gif)$/.test(ext))) { 
          alert('Error: extension is not allowed!' + Extensions + ' file ext: ' + ext); 
          return false; 
         } 

如果我使用变量,而不是静态的,然后它是提前 不工作

var Extensions = "jpg|png|jpeg|gif"; 
if (!(ext && /^(Extensions)$/.test(ext))) { 
          alert('Error: extension is not allowed!' + Extensions + ' file ext: ' + ext); 
          return false; 
         } 

感谢Imdadhusen

+0

为什么downvote? –

+0

我也想知道!为什么要投票? – imdadhusen

回答

1

您应该这样做:

(new RegExp("jpg|png|jpeg|gif")).test(ext)
+0

只要您使用的字符串是有效的正则表达式,您就可以这样做。 –

+0

好答案!非常感谢。 – imdadhusen

1

您正在使用正则表达式的无效语法。如果你打算将它存储在一个变量中,你仍然必须使用第一个例子中的正则表达式。

所以:

var Extensions = /^(jpg|png|jpeg|gif)$/; 
if (!(ext && Extensions.test(ext))) 

会工作。你的第二个例子是试图匹配“扩展”这个词。

+0

但我的要求是**我也有变量的动态值** – imdadhusen

0

试试这个:

var Extensions = /^(jpg|png|jpeg|gif)$/; 
if (!(ext && Extensions.test(ext))) { 
    alert('Error: extension is not allowed!' + Extensions + ' file ext: ' + ext); 
    return false; 
} 
+1

我认为你需要省略引号,例如'VAR扩展=/^(JPG | PNG | JPEG | GIF)$ /;' –

+0

您的权利,我错过了... –

+0

但我的要求是**我有变量也是动态的价值** – imdadhusen

0

要使用一个变量,你需要使用RegExp对象:

new RegExp('^(' + Extensions + ')$').test(ext) 

或者整个正则表达式分配到您的变量:

var Extensions = /^(jpg|png|jpeg|gif)$/; 
Extensions.test(ext) 

也许把它称为allowedExtensions或者其他东西。

0

它不会得到错误

var Extensions = "/^(jpg|png|jpeg|gif)$/"; 
    if (!(ext && Extensions.test(ext))) { 
           alert('Error: extension is not allowed!' + Extensions + ' file ext: ' + ext); 
           return false; 
          } 
+0

你的答案是和megaperlz一样。 –