Gan*_*ank 5 url google-chrome objective-c
- (BOOL) validateUrl: (NSString *) candidate {
NSString *urlRegEx =
@"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";
NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx];
if( [urlTest evaluateWithObject:candidate]
||[candidate containsString:@".com"]
||[candidate containsString:@".net"]
||[candidate containsString:@".org"]
||[candidate containsString:@".cn"]
||[candidate containsString:@".jp"]
)
{
return TRUE;
}
return FALSE;
}
Run Code Online (Sandbox Code Playgroud)
这是一长串 URL 域名,“.com”、“.net”、“.org”等。人们不需要在前面或地址栏中输入“http”。
那么 Chrome 地址栏是如何判断是 URL 还是搜索字符串的呢?
If I input "a.fa", it's not an URL.
"a a.com",it's a search string.
"a.mobi/aaa", it's an URL.
Run Code Online (Sandbox Code Playgroud)
可以通过 Chromium 找到答案,正如 funroll 提到的 \xe2\x80\x94 但这是正在发生的事情的基本想法,至少根据我的测试。
\n\n输入到“多功能框”中的字符串如果遵循以下格式,则被确定为 URL:
\n\n[protocol][subdomains].[subdomains].[domain name].[tld]
其中子域名(当然是可选的)和域名都只包含字母(对于 Chrome,这似乎包括重音字母)、数字、空格和连字符,并且 TLD/顶级域名来自批准的列表\ xe2\x80\x94.com、.net 等\xe2\x80\x94除非指定了协议,在这种情况下,任何 TLD 都被视为有效。协议也来自一组列表,但可以采用几乎任何格式,并在任意数量的斜杠后面加上冒号。如果协议不是设置列表的一部分,则将整个 URL 视为搜索。
\n\n如果上述 URL 格式中的字符串后面有一个斜杠(例如 stackoverflow.com/),则后面的任何内容都有效。
\n\n或者,如果字符串开头出现斜杠,Chrome 也会将其视为 URL(带有file://
协议)。
有效的例子(根据 Chrome):
\n\n\n\n\n\n
\n- stackoverflow.com
\n- abc.stackoverflow.com
\n- abc.abc.abc.abc.stackoverflow.com
\n- st\xc3\xa1ckoverflow.com(这会更改 URL,但允许\xe2\x80\x94尝试一下!)
\n- stack-overflow.com
\n- -stackoverflow.com(甚至可能不是合法域名,但它有效)
\n- 4stackoverflow.com
\n- stackoverflow.com
\n- stackoverflow.com/无效字符!@#$^\xc3\xa6
\n- [http]://stackoverflow.com(括号不是合法,但我不能包含该链接)
\n- [http]:////stackoverflow.com
\n- [http]:stackoverflow.com
\n- [http]:stackoverflow.mynewtld
\n
无效的例子:
\n\n\n\n\n\n
\n\n- 堆栈溢出.com
\n- stackoverflow*.com
\n- stack/overflow.com
\n- stackoverflow.mynewtld
\n而且,好吧,还有其他一切。
\n
我们只是希望有一个图书馆可以代替这一切。
\n 归档时间: |
|
查看次数: |
340 次 |
最近记录: |