2010-07-01 2 views
0

Je souhaite utiliser l'expression rationnelle suivante pour la validation d'un téléchargement de fichier:Javascript: problème de création d'objet RegExp

/^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*))+\.(ext)$/ 

Mais je veux être en mesure de préciser le filtre ext.

Est-ce exact?

function validateFile(str, ext) { 
    alert(str); 
    var expr = new RegExp("/^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*))+\.(" + ext.toLowerCase() + ")$/"); 
    alert(expr); 
    return expr.test(str); 
} 

Répondre

1

Vous n'avez pas besoin d'inclure les barres obliques au début et à la fin lorsque vous utilisez le constructeur RegExp:

var expr = /foo/; 

équivaut à:

var expr = new RegExp("foo"); 

Il vous suffit de prendre en compte les barres obliques inverses doubles (\) sur la chaîne de motif, par exemple:

var expr = /\\/; 

devrait être:

var expr = new RegExp("\\\\"); 

C'est parce que dans une chaîne littérale, la barre oblique inverse est également utilisé pour échapper à des personnages.

Edit: L'équivalent de

var expr = /^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*))+\.(ext)$/; 

devrait être:

var expr = new RegExp("^(([a-zA-Z]:)|(\\\\{2}\\w+)\\$?)(\\\\(\\w[\\w ]*))+\\.("+ 
         ext.toLowerCase + ")$"); 

Notez que vous pouvez également utiliser le drapeau insensible à la casse, dans la notation littérale comme /foo/i, avec le RegExp constructeur: new RegExp("foo", "i").

+0

ok, après avoir supprimé les barres obliques - c'est ce que j'ai maintenant - 'new RegExp ("^(([a-zA-Z] :) | (\ {2} \ w +) \ $?) (\ (\ w [\ w] *)) + \. ("+ ext.toLowerCase() +") $ ")' – Bojack

+0

Qui est de nouveau lancer une erreur – Bojack

+0

@wretrOvian: Donner un coup d'oeil à mon édition, vous devez * doubler * échapper les barres obliques, ne pas les enlever. – CMS