2016-12-06 6 views
0

これはコードです:あなたは、ファイルが誤った正規表現戻りをJPGされている場合でも、見ることができるように次のファイル拡張子が正規表現と一致しないのはなぜですか?

ext: jpg 
reg: /^.*\.(.jpg)$/i 
res: false 

isValid = field.uploads.forEach(upload => { 
    console.log(upload.file) 
    console.log('ext:', _.getFileExt(upload.file.name)) 
    console.log('reg:', regex) 
    console.log('res:', regex.test(_.getFileExt(upload.file.name))) 
}) 

これらはログです。どうしてこれなの?

EDIT:

ここでは、ユーティリティ関数です:

_.listToRegex = (array) => { 
    return new RegExp('^.*\\.(' + array.join('|') + ')$', 'i') 
} 

_.getFileExt = (string) => { 
    return string.split('.').pop() 
} 
+4

「jpg」の横に追加の '.'があります。それを除く。しかし、 '_.listToRegex'は実際にパターンにドットを追加しません。コードには、それを追加している何かがあります。また 'regex.test(_。getFileExt(upload.file.name))'では 'jpg'を完全正規表現正規表現でテストしますが、' _.getFileExt(upload .file.name) 'となります。 –

答えて

2

あなたは私の知る限り2つの問題があります。まず、正規表現にエラーがあります。次に、作成する正規表現がのファイル名またはのファイル拡張子と一致するかどうかを判断する必要があります。

1.コンソールに記録された正規表現には、上記のコメントに指摘されているように、余分な期間が含まれています。 /^.*\.(.jpg)$/iは、妥当性をテストするために式を使用するつもりであれば、/\.(jpg)$/iに凝縮することができます。あなたの正規表現の変数の割り当てを表示していないようでしたので、エラーが起こったかを正確に測ることは困難であるが、私の最高の推測では、あなたのようなあなたのlistToRegexユーティリティと呼ばれるということです。

var regex = _.listToRegex(['.jpg']) 

を文字列で.'.jpg'は余分な期間の導入を引き起こします。私はあなたがファイル名に対してそれをテストしたいと考えたときに第二に、あなたは、ファイルの拡張子に対するあなたの正規表現をテストしているように見える

var regex = _.listToRegex(['jpg']) 

2.:あなたがそのコードを置き換えることができます。

regex.test(upload.file.name) //=> true 
関連する問題