Write URL validation regex
URL validation regex 必须处理协议, 域, 端口, 路径, 查询, 和片段. Learn practical patterns 和当 到 use URL parser instead.
- 1
URL 有: scheme://主机:端口/路径?查询#片段. practical regex: ^https?://[a-zA-Z0-9.-]+(:\d+)?(/[^\s]*)?$ validates 基础结构. 为完整 RFC 3986 合规, use URL parser 而非 regex — URLs 能够包含 encoded characters, IPv6 addresses 在 brackets, 和复杂查询 strings 该 regex handles poorly.
- 2 正则表达式测试器 →
Test URL patterns. 简单: ^https?://\S+$ catches 显然 non-URLs. Moderate: ^https?://[a-zA-Z0-9.-]+(:\d+)?(/[^\s]*)?$ checks 结构. Test 针对有效 URLs (http://示例.com, https://sub.示例.co.uk:8080/路径?q=1#frag) 和无效 ones (missing 协议, spaces, 否主机).
- 3 URL 解析器 →
Use URL parser 而非 regex 为完整 validation. parser handles 所有 URL components, 编码, IPv6, 和 relative URLs. 它是 更多 reliable than regex 为 URL validation. Use regex 仅为 快速 checks; use parser 为 production validation.
常见问题
- Regex 或 URL parser 为 validation?
- Use URL parser (URL function Object() { [native code] } 在 JavaScript, urllib.解析在 Python) 为 production validation. 它 handles 所有 RFC 3986 cases 该 regex cannot (IPv6, encoded characters, relative URLs). Use regex 仅为 快速客户端-边提示或 当你 control URL 格式化.
- 应该 I require http/https?
- 为 web URLs, 是 — require https (和 optionally http 为 development). 为通用 URIs, 允许其他 schemes (ftp, mailto, file, 自定义). scheme determines rest 的格式化, 所以验证 per-scheme. 为用户输入, use URL parser 和检查协议 explicitly.