Last active
July 19, 2023 08:51
-
-
Save JustLoveBen/167a21f5c944489aed55d6b142d3ec28 to your computer and use it in GitHub Desktop.
URL正则表达式-iOS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //: Playground - noun: a place where people can play | |
| import UIKit | |
| import UIKit | |
| var regex = "(((http[s]{0,1}|ftp)://)?(([\\W\\.\\-]+\\.([a-zA-Z]{2,4}))|((::)?[0-255]\\.[0-255]\\.[0-255]\\.[0-255])|((([a-zA-Z0-9]{4})?:)?(([a-zA-Z0-9]{4})?:)?(([a-zA-Z0-9]{4})?:)?(([a-zA-Z0-9]{4})?:)?(([a-zA-Z0-9]{4})?:)?(([a-zA-Z0-9]{4})?:)?(([a-zA-Z0-9]{4})?:)?([a-zA-Z0-9]{4})?))(:\\d+)?(/[a-zA-Z0-9\\W\\.\\-~!@#$%^&*+?:_/=<>()]*)?)" | |
| var available_urls = ["http://foo.com/blah_blah", | |
| "http://foo.com/blah_blah/", | |
| "http://foo.com/blah_blah_(wikipedia)", | |
| "http://foo.com/blah_blah_(wikipedia)_(again)", | |
| "http://www.example.com/wpstyle/?p=364", | |
| "https://www.example.com/foo/?bar=baz&inga=42&quux", | |
| "http://✪df.ws/123", | |
| "http://userid:[email protected]:8080", | |
| "http://userid:[email protected]:8080/", | |
| "http://[email protected]", | |
| "http://[email protected]/", | |
| "http://[email protected]:8080", | |
| "http://[email protected]:8080/", | |
| "http://userid:[email protected]", | |
| "http://userid:[email protected]/", | |
| "http://142.42.1.1/", | |
| "http://142.42.1.1:8080/", | |
| "http://➡.ws/䨹", | |
| "http://⌘.ws", | |
| "http://⌘.ws/", | |
| "http://foo.com/blah_(wikipedia)#cite-1", | |
| "http://foo.com/blah_(wikipedia)_blah#cite-1", | |
| "http://foo.com/unicode_(✪)_in_parens", | |
| "http://foo.com/(something)?after=parens", | |
| "http://☺.damowmow.com/", | |
| "http://code.google.com/events/#&product=browser", | |
| "http://j.mp", | |
| "ftp://foo.bar/baz", | |
| "http://foo.bar/?q=Test%20URL-encoded%20stuff", | |
| "http://مثال.إختبار", | |
| "http://朝阳.北京.中国/政务", | |
| "http://उदाहरण.परीक्षा", | |
| "http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com", | |
| "http://1337.net", | |
| "http://a.b-c.de", | |
| "http://223.255.255.254", | |
| "http://1030::C9B4:FF12:48AA:1A2B"] | |
| var unavailable_urls = ["http://", | |
| "http://.", | |
| "http://..", | |
| "http://../", | |
| "http://?", | |
| "http://??", | |
| "http://??/", | |
| "http://#", | |
| "http://##", | |
| "http://##/", | |
| "http://foo.bar?q=Spaces should be encoded", | |
| "//", | |
| "//a", | |
| "///a", | |
| "/// 0", | |
| "http:///a", | |
| "foo.com", | |
| "rdar://1234", | |
| "h://test", | |
| "http:// shouldfail.com", | |
| ":// should fail", | |
| "http://foo.bar/foo(bar)baz quux", | |
| "ftps://foo.bar/", | |
| "http://-error-.invalid/", | |
| "http://a.b--c.de/", | |
| "http://-a.b.co", | |
| "http://a.b-.co", | |
| "http://0.0.0.0", | |
| "http://10.1.1.0", | |
| "http://10.1.1.255", | |
| "http://224.1.1.1", | |
| "http://1.1.1.1.1", | |
| "http://123.123.123", | |
| "http://3628126748", | |
| "http://3628126748", | |
| "http://.www.foo.bar/", | |
| "http://www.foo.bar./", | |
| "http://10.1.1.1", | |
| "http://10.1.1.254"] | |
| var predicate = NSPredicate(format: "SELF MATCHES %@", regex) | |
| print("---------------------------------------------- \n合法的URL:"); | |
| var availabel_urls_passed_num = 0; | |
| for url in available_urls { | |
| if predicate.evaluate(with:url) { | |
| availabel_urls_passed_num+=1 | |
| print("✅ \(url)") | |
| } else { | |
| print("❌ \(url)") | |
| } | |
| } | |
| print("合法的URL 通过率:\(100*availabel_urls_passed_num/available_urls.count)%% \n\n\n") | |
| print("---------------------------------------------- \n不合法的URL:"); | |
| var unavailabel_urls_passed_num = 0; | |
| for url in unavailable_urls { | |
| if predicate.evaluate(with:url) { | |
| print("❌ \(url)") | |
| } else { | |
| unavailabel_urls_passed_num+=1 | |
| print("✅ \(url)") | |
| } | |
| } | |
| print("不合法的URL 通过率:\(100*unavailabel_urls_passed_num/unavailable_urls.count)%% \n") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment