2016-12-06 4 views
0

Dies ist der Code:Warum stimmt die folgende Dateierweiterung Regex nicht überein?

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))) 
}) 

Dies sind die Protokolle:

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

Wie Sie sehen können, auch wenn die Datei die Regex ist jpg gibt false zurück. Warum ist das?

EDIT:

Hier sind die Utility-Funktionen:

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

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

Sie haben ein zusätzliches '.' im Muster neben' jpg'. Entfernen Sie es. Der '_.listToRegex' fügt den Punkt jedoch nicht dem Muster hinzu. Es gibt noch etwas im Code, das es hinzufügen könnte. Mit 'regex.test (_. GetFileExt (upload.file.name))' testest du 'jpg' mit einem vollen String Regex, es wird falsch sein, da es kein' .' im '_.getFileExt (Upload .file.name) '. –

Antwort

2

Sie haben zwei Probleme, soweit ich das beurteilen kann. Erstens, Ihr regulärer Ausdruck hat einen Fehler. Zweitens müssen Sie entscheiden, ob der von Ihnen erstellte reguläre Ausdruck mit Dateinamen oder Dateierweiterungen übereinstimmen soll.

1. Die Regex, die auf der Konsole protokolliert wurde, enthält einen zusätzlichen Zeitraum, wie in den obigen Kommentaren hervorgehoben. /^.*\.(.jpg)$/i könnte zu /\.(jpg)$/i kondensiert werden, wenn Sie nur den Ausdruck verwenden möchten, um auf Gültigkeit zu prüfen. Sie schien nicht die Zuordnung Ihrer regex Variable zu zeigen, so ist es schwierig zu beurteilen, wie genau der Fehler aufgetreten ist, aber meine beste Vermutung ist, dass Sie Ihre listToRegex Dienstprogramm wie genannt:

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

Die . im String '.jpg' würde die Einführung der zusätzlichen Frist verursachen. Man könnte diesen Code mit ersetzen:

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

2. Zweitens scheinen Sie Ihren regulären Ausdruck gegen die Dateierweiterung zu testen, wenn ich glaube, Sie es gegen einen Dateinamen testen möchten.

regex.test(upload.file.name) //=> true 
Verwandte Themen