2010-11-17 4 views
-1

Possible Duplicates:
PHP validation/regex for URL
PHP regex for validating a URLValidate Url с использованием регулярных выражений

Я использую

(((?:http|https):\/\/[a-zA-Z0-9\/\?=_#&%~-]+(\.[a-zA-Z0-9\/\?=_#&%~-]+)+)|(www(\.[a-zA-Z0-9\/\?=_#&%~-]+){2,})) 

для проверки URL в моем сценарии.

Но мой друг сказал мне, что есть проблема с этим URL:

http://www.example.com/example(200)aaaa.rar 

Как я могу добавить «(» и «)» к моему регулярным выражениям заявлению?

Есть ли другие символы, которые я должен добавить в свое регулярное выражение?

+0

Какой двигатель регулярного выражения вы используете? – Oded

+0

Я использую preg_match в php – faressoft

+0

В соответствии с вашим регулярным выражением, www.foo. #% ~ - действительный URL. Какой бы язык вы ни использовали, вероятно, уже есть средство проверки URL, которое работает лучше. –

ответ

0

Могу ли я рекомендовать этот сайт: http://regexlib.com/ Нажмите «Обзор» вверху и выберите кнопку «Uri».

Чтобы ответить на ваш вопрос, хотя, (((?:http|https):\/\/[a-zA-Z0-9\/\?=#&%~-]+(.[a-zA-Z0-9\/\?=#&%~-]+)+)|(www(.[a-zA-Z0-9\/\?=_#&%~-\\)\\(]+){2,}))

Обратите внимание на \) и \( к концу. Они должны быть экранированы (с префиксом \\), поскольку они являются символами, используемыми для группировки в регулярном выражении.

+0

Это не работает http://regexr.com?2simo – faressoft

+0

Это не учтите все те (к сожалению) теперь действующие интернационализированные домены с символами, отличными от ASCII. – TeaDrivenDev

+0

Я не на 100% знаком с форматированием этого сайта. Таким образом, некоторые символы отсутствуют внутри, поэтому я предполагаю, что вы указываете на источник, который будет иметь ответы, невредимые. @GCATNM: очень верно, но я не думаю (хотя, может быть, и ошибаюсь) они хотят быть _that_ all-inclusive. –

0

Я считаю, что спецификация ответит на ваш вопрос RFC-2068, хотя вам нужно будет распаковать ботинки BNF для поездки.

В общем, почти любой символ может быть использован после доменного имени, за исключением немногих, отведенные те, которые должны быть экранированы:

The BNF [in the RFC] includes national characters not allowed in valid URLs as specified by RFC 1738, since HTTP servers are not restricted in the set of unreserved characters allowed to represent the rel_path part of addresses, and HTTP proxies may receive requests for URIs not defined by RFC 1738

2

PHP уже есть способ проверки URL-адресов, filter_var, который будет работайте лучше, чем ваше регулярное выражение (которое, как я уже отмечал выше, допускает ложные срабатывания):

$url = "http://www.example.com/example(200)aaaa.rar"; 
var_dump(filter_var($url, FILTER_VALIDATE_URL)); 
Смежные вопросы