Regexs работает в Firefox, но не в 7.0 - PullRequest
0 голосов
/ 18 февраля 2009

Кажется, есть некоторые проблемы с использованием валидаторов регулярных выражений asp.net, когда они работают в Firefox, но не в некоторых разновидностях, т. Е. (И, может быть, наоборот, я не знаю).

В любом случае, у кого-нибудь есть замена:

([a-zA-Z1-9]*)\.(((P|p)(D|d)(F|f))|((d|D)(o|O)(c|C)))

Чтобы в основном соответствовать любому имени файла / пути с расширением PDF или Doc?

Как я уже сказал, это прекрасно работает при запуске под Firefox, но не то есть 7

РЕДАКТИРОВАТЬ: я говорю о проверке на стороне клиента здесь.

Ответы [ 3 ]

2 голосов
/ 18 февраля 2009

Вы не очень снисходительны:

 ([a-zA-Z1-9]*)

Не соответствует MyPDF-0.pdf или, что более важно, C:\Path\To\Doc.pdf. Проверьте ввод формы, посмотрите, есть ли у вас полный путь к файлу или просто имя файла.

Редактировать

Попробуйте это:

\.([Pp][Dd][Ff]|[Dd][Oo][Cc][Xx]?)$

Если вы не можете сделать это без учета регистра, как в JavaScript:

/\.(pdf|docx?)$/i
0 голосов
/ 18 февраля 2009

В вашем регулярном выражении нет ничего плохого (кроме некоторых оптимизаций, которые вы можете сделать, как предлагают другие). Следующий код прекрасно работает в IE 7 и Firefox и успешно соответствует строке:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title>Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript">
    window.onload = function() {
        var regex = /([a-zA-Z1-9]*)\.(((P|p)(D|d)(F|f))|((d|D)(o|O)(c|C)))/;
        alert(regex.test('test.pdf'));
    };
    </script>
</head>
<body></body>
</html>

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

0 голосов
/ 18 февраля 2009
<script type="text/javascript">
var re = /([a-zA-Z1-9]*)\.(((P|p)(D|d)(F|f))|((d|D)(o|O)(c|C)))/;
var filename = "abcd.PdF";
document.writeln(re.test(filename)); // true in IE 7
</script>

Можете ли вы предоставить тестовый пример, который не работает в IE 7, но работает в Firefox?

Вы можете заменить все эти or s на /([a-zA-Z1-9]*)\.(([Pp][Dd][Ff])|([dD][oO][cC]))/ или /([a-z1-9]*)\.((pdf)|(doc))/i.

У Джеймса есть хорошее замечание: если предполагается, что оно соответствует значению в <input type="file">, Internet Explorer может включать путь, а Firefox - нет (я знаю, что это происходит на сервере, это может быть и на клиенте) .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...