Оператор Javascript If, используемый для проверки недействительных расширений файлов
У меня есть форма, в которой люди могут вводить пути к файлам. Я хочу убедиться, что пути, которые они вводят, указывают на фотографии, поэтому вот что я думал бы работать.
function checkExt()
{
var extension= /* I know that the code to cut the extension off of the file
is working correctly so for now let just go with it ok */
if(extension!="jpg" || "gif" || "bmp" || "png" || "whatever else")
alert("The file extension you have entered is not supported");
}
Но это не работает. Я отследил его до оператора if, потому что, если я выбираю только один вид файла для проверки, тогда он будет работать правильно. Поэтому мой вопрос к вам - это то, что, черт возьми, я должен изменить, чтобы эта вещь работала правильно. Я уже около трех часов, и это сводит меня с ума. Спасибо за всю помощь заранее.
Ответы
Ответ 1
Это синтаксис и логическая ошибка. Это должно быть:
if (extension != "jpg" &&
extension != "gif" &&
extension != "bmp" &&
extension != "png" &&
extension != "whatever else") {
// This will execute when the extension is NOT one of the expected
// extensions.
}
Кроме того, вы можете обработать его немного более кратко с регулярным выражением:
if (!/jpg|gif|bmp|png|whatever/.test(extension)) {
// This will execute when the extension is NOT one of the expected
// extensions.
}
Добавление:
Приведенные выше примеры выполняют тело оператора if, если значение extension
не является одним из поддерживаемых значений. Если вы хотите выполнить тело if-оператора, когда значение extensions
является одним из поддерживаемых значений, вы должны изменить логику не равным/и равным/или следующим образом:
if (extension == "jpg" ||
extension == "gif" ||
extension == "bmp" ||
extension == "png" ||
extension == "whatever else") {
// This will execute when the extension is one of the expected extensions.
}
И снова, это будет более кратким, используя регулярное выражение:
// I just removed the leading ! from the test case.
if (/jpg|gif|bmp|png|whatever/.test(extension)) {
// This will execute when the extension is one of the expected extensions.
}
Ответ 2
Вы должны использовать &&
вместо ||
, и вы должны префикс оператора !=
extension
для каждого условия, а не только для первого:
if (extension != "jpg" &&
extension != "gif" &&
extension != "bmp" &&
extension != "png" &&
extension != "whatever else")
Ответ 3
В качестве альтернативы многословию используйте регулярное выражение:
if (extension.search(/jpg|gif|bmp|png/) === -1) {
alert("The file extension you have entered is not supported.");
}
Ответ 4
Вам нужно указать параметры для сравнения в каждом разделе.
if( extension != "jpg" ||
extension != "gif" ||
extension != "bmp" ||
extension != "png" ||
extension != "whatever else"){
//TODO: handle condition
}
Как отмечали другие, это логическая ошибка в том, что если "jpg" является расширением, условие все равно будет удалено, потому что "jpg" != "gif". Возможно, вы захотите использовать &&
.
Ответ 5
Вам нужно сравнить переменную extension
для каждого тестируемого расширения. Компактный способ сделать это:
var extension = whatever;
var supportedExtensions = ["jpg","gif","bmp","png",... whatever else];
if (supportedExtensions.indexOf(extension) < 0) alert("Unsupported extension");
Ответ 6
Другие ответы показали, что ваша логика JavaScript для множественных сравнений неверна. Но гораздо лучший способ сделать это - использовать карту javascript следующим образом:
function checkExt() {
var allowedExtensions = {
"jpg": true, "gif": true, "bmp": true, "png": true, "whatever else":true
};
var extension= /* I know that the code to cut the extension off of the file
is working correctly so for now let just go with it ok */
if (allowedExtensions[extension] !== true) {
alert("The file extension you have entered is not supported");
}
}
Легче поддерживать, просто добавляя/удаляя элементы в/из объекта allowedExtensions
.