10.12.2012, 15:29 | #1 |
Участник
|
проверка кириллических доменов
AX 2009
Проверка корректности введенного URL адреса (eng) \Classes\Global\isValidURL есть ли варианты проверки корректности кириллических доменов *.рф? |
|
10.12.2012, 16:37 | #2 |
Участник
|
http://habrahabr.ru/post/123845/
Цитата:
URL на латинице. Если нужно распознавать и кириллические домены, необходимо изменить все «a-z0-9» на «а-яёa-z0-9» и добавить в список доменных зон «рф»
|
|
10.12.2012, 16:44 | #3 |
Axapta
|
S.Kuskov, все чуть-чуть не так. При проверке используеся функция IsWellFormedUriString. И "By default, the string is considered well-formed in accordance with RFC 2396 and RFC 2732. If International Resource Identifiers (IRIs) or Internationalized Domain Name (IDN) parsing is enabled, the string is considered well-formed in accordance with RFC 3986 and RFC 3987". То есть, вроде как, на самом деле функция уже умеет проверять кириллические (IDN) домены. Но by default эта возможность выключена.
http://msdn.microsoft.com/en-us/libr...uristring.aspx Цитата:
Enabling IDN will convert all Unicode labels in a domain name to their Punycode equivalents. Punycode names contain only ASCII characters and always start with the xn-- prefix. The reason for this is to support existing DNS servers on the Internet, since most DNS servers only support ASCII characters (see RFC 3940).
|
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
10.12.2012, 20:28 | #4 |
Участник
|
|
|
10.12.2012, 21:08 | #5 |
Axapta
|
Так в 2009 же.
X++: ret = System.Uri::IsWellFormedUriString(url,System.UriKind::Absolute); |
|
10.12.2012, 21:51 | #6 |
Участник
|
Ничего не понимаю. А это тогда что?
X++: static client server boolean isValidURL(URL url) { InteropPermission permission; boolean ret; str urlFilter; System.Text.RegularExpressions.Regex regEx; System.Text.RegularExpressions.Match regMatch; permission = new InteropPermission(InteropKind::ClrInterop); permission.assert(); // The regular expression used to validate URL was taken from // [url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/paght000001.asp[/url] // and modfied slightly to allow URL's without the HTTP part. urlFilter = @"^(http(s?)\:\/\/)?[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&;%\$#_]*)?$"; //BP Deviation documented regEx = new System.Text.RegularExpressions.Regex(urlFilter); regMatch = regEx.Match(url); ret = regMatch.get_Success(); return ret; } |
|
10.12.2012, 22:37 | #7 |
Axapta
|
Это в каком ролапе? Такая проверка с помощью RegularExpressions же была в 4ке, если я не путаю. Проверка корректности УРЛ - это же чуть больше, чем простая проверка регулярного выражения по маске.
X++: static client server boolean isValidURL(URL url) { InteropPermission permission; boolean ret; #define.HTTP("http") #define.HTTPS("https") #define.SLASH("://") ; permission = new InteropPermission(InteropKind::ClrInterop); permission.assert(); if(strscan(url,#SLASH,1, strlen(url))) { if( substr(url,1,4) == #HTTP || substr(url,1,5) == #HTTPS) ret = System.Uri::IsWellFormedUriString(url,System.UriKind::Absolute); } else { url = #HTTP + #SLASH + url; ret = System.Uri::IsWellFormedUriString(url,System.UriKind::Absolute); } return ret; } |
|