【问题标题】:Regex to validate both web and LDAP url正则表达式验证 web 和 LDAP url
【发布时间】:2012-03-07 14:02:45
【问题描述】:

我正在创建一个正则表达式 ^(http://|https://|ldap://|ldaps://){1}[\S]*$ 来验证这些类型的 URL

它不应该验证

我会将它用于 javascript

【问题讨论】:

  • ldap://192.442.242.244:389 不是有效 IP。

标签: javascript regex url


【解决方案1】:
m{ (?:ldap|http)s?://                   # Scheme

(?:(?!.*\d[/?:]) [a-z0-9\-._~%]+      | # IPv4 host (forbid ending with digit)
   # IP (yep, I've copied this regexp)
   (?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])
   \[[a-z0-9\-._~%!$&'()*+,;=:]+\] ) # or IPv6 host

(?::\d+)?                            # Port

(?:

  [/?]                               # Slash or question mark

  [-A-Z0-9+&@#/%?=~_|$!:,.;]*        # URL itself

)? # Technically, trailing / is required in URLs, but many browser implementations ignore it when accepting those
                                                }ix

此正则表达式应与/ix 一起使用。由于 JS 不包含 /x 修饰符,我将包含没有它的版本。

/(?:ldap|http)s?:\/\/(?:(?!.*\d[\/?:])[a-z0-9\-._~%]+|(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\[[a-z0-9\-._~%!$&'()*+,;=:]+\])(?::\d+)?(?:[\/?][\-A-Z0-9+&@#\/%?=~_|$!:,.;]*)?/i

请注意,HTTP URL 中允许使用大量字符,而无需使用% 标记进行转义。您可能不希望 URL 不通过,因为它包含 URL 中允许的字符 * :)。

【讨论】:

  • @imrantariq:好的,我通过允许? 不带斜线添加了对HTTP 标准的故意破坏。顺便说一句,http://wwsw.stackoverflow.com 在技术上是有效的 URL。完全有可能制作这样的子域。检查 URL 是否存在超出了正则表达式的范围 - 它需要实际的网络连接。
【解决方案2】:

对于您可以使用的 IP
^(http://|https://|ldap://|ldaps://)((\\d{1,3}\\.){3}\\d{1,3}(:\\d{1,5})?)$
但对于其他网址......您必须检查网站是否响应。因为它可以是一个网站说wwsw.com,你的正则表达式应该如何知道它是否是一个真实的网站?可以有一个带有子域 wwsw 的真实站点。
编辑:
GlitchMr 是对的。对于 IPv4,使用他的正则表达式。

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 2015-09-07
    • 2013-08-24
    • 2011-07-30
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多