Swift如何修改正则实现支持带括号后缀的URL校验?
你只需在原有正则的结束标记$之前,新增可选的数字括号匹配段(\\(\\d+\\))?即可同时支持两类URL校验。
修改后的完整代码如下:
extension String { func validateUrl() -> Bool { let urlRegEx = "^(http|https|ftp)\\://([a-zA-Z0-9\\.\\-]+(\\:[a-zA-Z0-9\\.&%\\$\\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\\-]+\\.)*[a-zA-Z0-9\\-]+\\.(com|ru|kz|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\\:[0-9]+)*(/($|[a-zA-Z0-9\\.\\,\\?\\'\\\\\\+&%\\$#\\=~_\\-]+))*(\\(\\d+\\))?$" return NSPredicate(format: "SELF MATCHES %@", urlRegEx).evaluate(with: self) } }
新增规则说明:
- 内层的
\\(、\\)分别匹配字面量的左右括号,因为Swift字符串中反斜杠需要转义,正则本身也需要转义括号特殊字符,所以需要两个反斜杠 \\d+匹配1位及以上的纯数字- 最外层的
()?表示整个括号数字段是可选的,出现0次或1次,不影响原有不带括号的URL的校验逻辑
内容的提问来源于stack exchange,提问作者MaryLitv21
相关产品推荐
相关产品推荐

