Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript验证我的URL效率?_Javascript_Regex - Fatal编程技术网

如何使用JavaScript验证我的URL效率?

如何使用JavaScript验证我的URL效率?,javascript,regex,Javascript,Regex,My regex成功验证了除http://www.google 以下是我在JSFIDLE中的URL验证程序: 它正确验证以下URL: http://www.google.com给出真值 www.google.com给出True http://www.rootsweb.ancestry.com/~mopoc/links.htm给出真值 http://www.给出False ……但不是这个: http://www.google给出真值 在这种情况下,返回true是不正确的。如何验证该案例?我认为您需

My regex成功验证了除
http://www.google

以下是我在JSFIDLE中的URL验证程序:

它正确验证以下URL:

http://www.google.com
给出真值

www.google.com
给出True

http://www.rootsweb.ancestry.com/~mopoc/links.htm
给出真值

http://www.
给出False

……但不是这个:

http://www.google
给出真值


在这种情况下,返回true是不正确的。如何验证该案例?

我认为您需要简化这一过程。有很多URL验证正则表达式,但作为练习,我将仔细思考构建一个正则表达式的过程

  • 首先,如果存在一个协议,则需要匹配该协议:
    /((http | ftp)s?:\/\/)?
  • 然后匹配任何一系列非空白字符:
    \S+
  • 如果您试图从文本中挑出URL,您将需要寻找它是URL的标志。查找点或斜线,然后查找更多的非空白:
    [\.\/]\S*/
  • 现在把它们放在一起:

    /(((http|ftp)s?:\/\/)|(\S+[\.\/]))\S*[^\s\.]*/
    
    我猜你试图寻找
    www.google
    是因为新的TLD。。。事实上,这样的URL可能看起来像
    google
    ,因此任何单词都可能是URL。试图找到一个与有效URL匹配的“一网打尽”正则表达式是不可能的,所以最好只使用上面简单的方法

    编辑:我在协议部分和非空白部分之间插入了一个
    |
    ,然后是点或斜线部分以匹配
    http://google
    如果人们选择这样编写新的URL


    编辑2:查看评论了解下一步改进。它确保
    google.com
    匹配,
    http://google
    匹配,甚至
    google/
    匹配,但不是
    a.

    事实是
    http://www.google
    是URL的有效格式(事实上,随着新的定制TLD的推出,它甚至可能成为一个有效的地址,尽管更可能是
    http://google
    )。如果要检查该地址是否有效,唯一的方法是尝试访问该地址并查看服务器是否响应(或至少在DNS中查找)。我并不想尝试分析如此长而复杂的正则表达式,但我要说,它比像
    [a-z]\d |-|-|-|-|-|-|-|-|-|
    这样的结构要复杂得多,而不是反复使用
    [a-z\d.\u~-]
    。[请看一下这篇文章][1]可能会帮助你…[1]:@Thor84no使用http://www.hyundai而不是http://www.hyundai.com/in/en/main/my friend正确吗?试试看,这可能有助于对我的frnd进行默认更正,但我们无法完全验证。我不确定我是否理解
    背后的思想。该条无助于匹配
    http://google
    ,至少不像你看起来那样是有意的。据我所知,这样做的主要结果是你有一个短路,几乎可以接受任何东西(根据regex
    a.
    是有效的例子)。@Thor84no,
    的想法是它可以接受
    http://google
    ,或
    google.com
    ,以及结尾处的
    *
    点(而不是
    +
    )是URL可以以斜杠结尾。
    a.
    确实会从网络中溜走。我实际上是想迎合这一点,因为我讨厌电子邮件被解析时在超链接中包含一个句号。我会解决它。