2016-02-02 3 views
2

Я пытаюсь проверить имя файла в javascript.Проверка имени файла с расширением

Символы, которые я хочу разрешить: любые буквы, любые цифры, символы подчеркивания и дефисы.

Я хочу предупредить пользователя, если это условие не выполнено. Я думал, что у меня есть регулярное выражение, которое будет выполнять работу на основе некоторых онлайн-тестировщиков регулярных выражений, но оно не работает.

Demo https://jsfiddle.net/8g65yuu6/

var filename = 'index.html'; 

if (filename.match(/^(?:[\w]\:|\\)(\\[a-z_\-\s0-9\.]+)+\.html$/)) { 
    alert('Success: valid'); 
} else { 
    alert('Error: invalid'); 
} 

Я надеялся, что это будет проверить в HTML-файл, то условие никогда не встречались.

+4

Если я хочу, чтобы проверить файл, я буду проверять только расширение. Зачем устанавливать правила для имени файла. Измените его после загрузки файла. Используйте '/ \. Html $/i.test (имя_файла)'. – Tushar

+1

Мне нужно проверить все, иначе пользователь не узнает их файлы, как только я удалю пробелы, скобки, незаконные чартеры и т. Д. –

+0

Как насчет использования только '/^([\w_\-]+)\.html $/'? [Demo] (https://regex101.com/r/gT0xR7/1) – empiric

ответ

2

Это будет работать, и это намного проще:

var filename = 'index.html'; 

if (filename.match(/^([\w\-]+)\.html$/)) { 
    alert('Success: valid'); 
} else { 
    alert('Error: invalid'); 
} 

Не знаю, почему у вас есть 2 отдельные пункты:

(?:[\w]\:|\\) 

и

(\\[a-z_\-\s0-9\.]+) 

Кроме того, в + после последнего предложения всегда будет выходить из строя.

+0

Спасибо - я использовал ваш пример и удалил '\ s' и' \ .', как вы предложили. https://jsfiddle.net/8g65yuu6/3/ –

0

Если вы просто хотите проверить, если имя файла не содержит допустимые символы независимо от их заказа вы можете упростить ваш регулярное выражение:

/^([\w\-]+)\.html$/

Пояснение: Захватывает один руды более символов, которые

  • любое слово символ (такой же, как [a-zA-Z0-9_])
  • дефис -

Обновленный код:

var filename = 'index.html'; 

if (filename.match(/^([\w\-]+)\.html$/)) { 
    alert('Success: valid'); 
} else { 
    alert('Error: invalid'); 
} 

Demo of the regex

Updated jsFiddle

+0

Это не удастся для имен файлов с более чем одним периодом '.', также он не включает пробелы' \ s' – mikeyq6

+0

'\ w = [a-zA-Z0- 9_] 'so' _' не требуется в группе. '-' не нужно экранировать, когда он является первым/последним символом в классе символов. Используйте флаг 'i'. Используйте 'test' вместо' match'. – Tushar

+0

@ mikeyq6 как OP сказал 'Символы, которые я хочу разрешить: любые буквы, любые числа, символы подчеркивания и дефисы. Поэтому для моего понимания нет' .' и пробелов разрешено – empiric

Смежные вопросы