2013-08-01 4 views
2

Какое правильное регулярное выражение проверяет полное доменное имя на C# и Javascript? Я искал все вокруг, и я нахожу разные спецификации. Какой из них правильный.Регулярное выражение для проверки полного доменного имени в C# и Javascript

Несколько примеров я нашел:

1.(?=^.{1,254}$)(^(?:(?!\d+\.|-)[a-zA-Z0-9_\-]{1,63}(?<!-)\.?)+(?:[a-zA-Z]{2,})$) 

    2. (?=^.{1,254}$)(^(?:(?!\d|-)[a-zA-Z0-9\-]{1,63}(?<!-)\.?)+(?:[a-zA-Z]{2,})$) 

    3. \b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b 

    (Regular Expression cook book) 

Пожалуйста, помогите

+0

[RFC 1035.] (http://tools.ietf.org/html/rfc1035), http://blog.gnukai.com/2010/06/ fqdn-regular-expression/ – Andreas

+0

@ Andreas: thank u. Я это видел. Он говорит: «Единственное отклонение от правил RFC, которые я делаю, является дополнительным правилом, согласно которому домен верхнего уровня (часть, которая приходит после последнего«. ») Должна быть только символами и должна быть 2 или более (.com,. net, .org, .eu, .uk, ect). Я не могу найти, где это документировано ». Не уверен, что это правильно. – Shetty

+0

Из [RFC 920] (http://tools.ietf.org/html/rfc920) - TLD Reqs: ARPA, GOV, EDU, COM, MIL, ORG или английский код страны с двумя буквами. Таким образом, это похоже на действующее расширение/модификацию. – Andreas

ответ

3

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

/^(?=.{1,254}$)((?=[a-z0-9-]{1,63}\.)(xn--+)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}$/i 

Пояснение:

^      # Start of string 
(?=.{1,254}$)   # Assert length of string: 1-254 characters 
(      # Match the following group (domain name segment): 
(?=[a-z0-9-]{1,63}\.) # Assert length of group: 1-63 characters 
(xn--+)?    # Allow punycode notation (at least two dashes) 
[a-z0-9]+    # Match letters/digits 
(-[a-z0-9]+)*   # optionally followed by dash-separated letters/digits 
\.     # followed by a dot. 
)+      # Repeat this as needed (at least one match is required) 
[a-z]{2,63}   # Match the TLD (at least 2 characters) 
$      # End of string 
+0

благодарю вас за ур ответ. Это работает. Не могли бы вы сообщить мне, какие ресурсы я могу найти, чтобы найти правила для полного доменного имени, чтобы я мог проводить больше тестирования? – Shetty

+0

В комментариях есть ссылки на некоторые RFC; Однако эти документы довольно сложны. Возможно, помогает http://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names? –

+3

xn ---- dtbjjdcfhg5cckn1k9a.xn - p1ai Попробуйте ... и получите «false». – diproart