2009-11-04 3 views
1

Это регулярное выражение не работает в Firefox, но работает в IE.Регулярное выражение Javascript не работает в Firefox

function validate(x) { 
    return /.(jpeg|jpg)$/ig.test(x); 
} 

Может кто-нибудь объяснить почему?

+2

Обновите тестовый корпус * valid * (тот, который показывает «сбойные» входы). Благодарю. – 2009-11-04 01:39:21

+0

Можете ли вы объяснить, как работает этот код? – jamal

ответ

3

Если вы тестируете только с именем файла, а затем установить «г» флаг для глобальных не имеет особого смысла, так как вы соответствия в конце строки в любом случае - я побежал следующее:

function validate(x) { 
    return /\.(jpeg|jpg)$/i.test(x); 
} 

var imagename = 'blah.jpg'; 
alert (validate(imagename)); // should be true 
imagename = 'blah.jpeg'; 
alert (validate(imagename)); // should be true 
imagename = 'blah.png'; 
alert (validate(imagename)); // should be false 

все три теста вышли как ожидалось в FF.

Что касается «как это работает» - регулярные выражения можно получить довольно сложно - но я объясню детали выше схеме:

  • слэш / используется для разделения рисунка на
  • точка . имеет особое значение «любой символ без пробелов» - записывает его как \. заставляет Паттен только Совпадение fullstop
  • () означает сбор (он становится более сложным, но охватывает такое использование)
  • в | означает «или»
  • $ означает конец строки (или конец строки в тексте многострочного)
  • я после «случае нечувствительной» Второй косой черты означает
  • g означает «глобальный», что не имеет особого смысла в этом случае, поэтому я удалил его.

так ..

/\.(jpeg|jpg)$/i 

означает "строка заканчивается либо .jpeg или .jpg - игнорирование дела"

так ... .JPEG, .jpg, .jpeg, и т.д. ... все пройдет сейчас ...

+1

Или, читая прямо из RE, он соответствует строке «с точкой, за которой следуют либо« jpeg », либо« jpg », все в конце и игнорируя случай« – outis

+0

спасибо многому человеку, я просто удалил g и добавил вперед slash infront of «.» .. он отлично работает человек – jamal

+1

«g» означает «глобальный», а не «жадный» в соответствии с разделом «Спецификация языка ECMAScript» 15.10.4.1. Тем не менее, он *, вероятно, здесь не нужен, поэтому его удаление было бы хорошим планом. – Tim

3

В выражениях регулярных выражений "." само по себе означает «любой символ». Ты имел ввиду "\." означать «период»?

2

Функция использует шаблон regular expression.(jpeg|jpg)$ для проверки строк. Похоже, что цель состоит в том, чтобы проверить имена файлов, чтобы убедиться, что они имеют расширение либо jpg, либо jpeg.

Как указал Джеймс Бейли, есть ошибка в том, что период должен быть экранирован обратным слэшем. Период в регулярном выражении будет соответствовать любому символу. Таким образом, как показано, шаблон будет соответствовать как imagexjpg, так и image.jpg.

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