此字符集
[^\/:] // all characters except / or :
每个jslint b.c. 弱。我应该指定可以使用的字符,而不是根据SO Post不能使用的字符。
这是一个简单的非生产级别域测试器,如下所示:
domain: /:\/\/(www\.)?([^\/:]+)/,
我只是在寻找如何思考这个问题的方向。帖子提到允许无数的Unicode字符并不是一件好事...我如何制定一个更好的写一点的计划?
我并不关心我的域名检查程序的完整性(它只是一个原型)......我担心如何以不同的方式编写注册表。
答案 0 :(得分:2)
根据http://en.wikipedia.org/wiki/Domain_name#Internationalized_domain_names
域名系统中允许的字符集基于ASCII
并按照http://www.netregister.biz/faqit.htm#1
为您的域名命名,您可以使用任何字母,0到9之间的数字,以及符号“ - ”[只要第一个字符不是“ - ”]
并且考虑到您的域名必须以 .something 结尾,您正在寻找
([a-zA-Z0-9][a-zA-Z0-9-]*\.)+[a-zA-Z0-9][a-zA-Z0-9-]*
答案 1 :(得分:1)
对于谷歌来说,这是一个很好的问题,你知道......但是只是为了弄湿你的喙:马修奥里奥丹已经写了这样的正则表达式,无论是否有协议都可以连接。
的链接但是为了将来的参考,我也可以在这里提供正则表达式:
/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[.\!\/\\w]*))?)/
正如博客作家马修本人所做的那样:
(
( # brackets covering match for protocol (optional) and domain
([A-Za-z]{3,9}:(?:\/\/)?) # match protocol, allow in format http:// or mailto:
(?:[\-;:&=\+\$,\w]+@)? # allow something@ for email addresses
[A-Za-z0-9\.\-]+ # anything looking at all like a domain, non-unicode domains
| # or instead of above
(?:www\.|[\-;:&=\+\$,\w]+@) # starting with something@ or www.
[A-Za-z0-9\.\-]+ # anything looking at all like a domain
)
( # brackets covering match for path, query string and anchor
(?:\/[\+~%\/\.\w\-]*) # allow optional /path
?\??(?:[\-\+=&;%@\.\w]*) # allow optional query string starting with ?
#?(?:[\.\!\/\\\w]*) # allow optional anchor #anchor
)? # make URL suffix optional
)
但是在你的URL域名的情况下,[^\/:]
的否定可能只是:
[-0-9a-zA-Z_.]
这应该匹配//之后和之前的所有内容。但是当您的网址没有以斜线结尾时会发生什么?在那种情况下你会做什么?
高级正则表达式(简化)仅匹配一个字符,就像您的负字符集一样。所以这只是替换你正在使用的完整注册表中的负面集。
答案 2 :(得分:1)
“我应该指定可以使用的字符而不是不能使用的字符”
不,这是胡说八道,只是JSLint是JSLint。
当您在正则表达式中看到[^\/:]
时,它立即显而易见。如果您尝试列出所有可能的允许的字符,那么生成的正则表达式将非常难以阅读,并且很容易意外忘记包含一些字符。
如果您有一组特定的允许字符,那么请列出它们。这比尝试列出所有可能的无效字符更容易,更可靠。
但是如果你有一组特定的无效字符,则[^]
语法是适当的方法。
答案 3 :(得分:1)
这是你可以拥有的角色的正则表达式:
mycharactersarecool[^shouldnothavethesechars](oneoftwooptions|anotheroption)
这就是你在谈论的吗?