URL正则表达式优化:支持localhost类URL验证
修正URL验证正则:支持localhost并拒绝无后缀域名
我帮你调整了原有的正则表达式,既能完美支持localhost(带/不带HTTP协议、带端口的情况),又能精准拒绝像google或http://google这类没有有效域名后缀的简单字符串。
修改后的正则表达式
(^|\s)((https?:\/\/)?(localhost(:\d+)?|[\w-]+(\.[\w-]+)+\.?(:\d+)?)(\/\S*)?)
关键修改说明
- 新增
localhost(:\d+)?分支:专门匹配localhost地址,允许后面跟随端口号(比如:8080),不管有没有HTTP/HTTPS协议前缀都能匹配 - 拆分域名匹配逻辑:用
|分隔两个规则,一个处理localhost场景,另一个保留原有的常规域名校验[\w-]+(\.[\w-]+)+\.?(:\d+)?,确保常规域名必须包含至少一个.(也就是具备有效后缀)
测试用例验证
能匹配的合法地址
localhost:8080http://localhost:8080https://localhosthttps://example.comapi.sub-domain.io:5000/v1/usershttp://my-site.co.uk/path
会被拒绝的非法字符串
google(无有效域名后缀)http://google(无有效域名后缀)test(纯普通字符串,无域名结构)http://test(无有效后缀的伪URL)
如果之后需要支持更多本地开发用的域名(比如local.dev),只需要在localhost分支后面继续添加即可,比如:
(^|\s)((https?:\/\/)?(localhost(:\d+)?|local\.dev(:\d+)?|[\w-]+(\.[\w-]+)+\.?(:\d+)?)(\/\S*)?)
内容的提问来源于stack exchange,提问作者StevieB
相关产品推荐
相关产品推荐

