【发布时间】:2021-09-02 16:14:45
【问题描述】:
在我的应用程序中,我需要验证用户输入到 textField 中的 URL。有效 URL 的末尾可能带有带数字的括号,例如“https://stackoverflow.com(24)”。不带括号的 URL,例如“https://stackoverflow.com”,也是有效的。
我使用此代码来验证不带括号的 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\\.\\,\\?\\'\\\\\\+&%\\$#\\=~_\\-]+))*$"
return NSPredicate(format: "SELF MATCHES %@", urlRegEx).evaluate(with: self)
}
}
但是,它不会验证带括号的 URL。我应该在这个正则表达式的末尾结束什么以使其适用于两种类型的 URL?任何帮助表示赞赏!
【问题讨论】:
-
验证
URL是什么意思?你不能试着用你的字符串初始化一个URL吗?如果返回nil则无效。 -
你可以在最后加上
(\(\d+\))?,有什么我遗漏的吗? -
多么巨大的正则表达式模式????也许只是
return URL(string: self) != nil就足够了。如果 URL 无效,init 方法返回nil。 -
你到底想用你庞大的正则表达式模式验证什么?