找到正确的regex进行URL验证的难度

时间:2016-08-31 05:01:52

标签: javascript regex node.js typescript

我必须为我的项目设置一些不接受错误网址的规则。我正在使用正则表达式。

我的网址是“http:// some / resource / location”。

此网址不应允许开头,中间或结尾的空格。

例如,这些空格无效:

  • “https:// some /(中间的空间)资源/位置”
  • “https:// some / resource / location(space in end)”
  • “(开始时的空间)https:// some / resource / location”
  • “https://(此处为空格)some / resource / location”

这些情况也是无效的。

  • “httpshttp:// some / resource / location”
  • “https:// some / resource / location,https:// some / resource / location”

目前我正在使用正则表达式

var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/; 

此正则表达式接受所有这些无效方案。我无法找到正确的匹配正则表达式,只有当url有效时才会接受。任何人都可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

我们需要验证n个场景以进行URL验证。如果你对你的给定模式有所了解,那么从其他答案的regex表达式看起来很好。

或者

如果您想要处理所有网址验证方案,请参阅In search of the perfect URL validation regex

答案 1 :(得分:0)

  $time_str = 'Friday September 09, 2016 7:00 pm - 8:00 pm';
  $comma_pos = strpos($time_str, ',');
  $date = substr($time_str, 0, $comma_pos + 7);
  $time = substr($time_str, $comma_pos + 7, strlen($time_str));
  $result = '<div>' . $date . '<span>' . $time . '</span></div>';
  echo $result;

这个正则表达式好吗?

答案 2 :(得分:0)

使用此

^\?([\w-]+(=[\w-]*)?(&[\w-]+(=[\w-]*)?)*)?$

请参阅live demo

这考虑了每对&#34;作为一个键后跟一个可选值(可能是空白),并有一个第一对,然后是一个可选的&amp;那么另一对,整个表达式(除了前导?)是可选的。这样做会阻止匹配?&amp; abc = def

另请注意,连字符在字符类中的最后一个时不需要转义,允许略微简化。

您似乎希望在键或值中的任何位置允许使用连字符。如果密钥需要连字符:

^\?(\w+(=[\w-]*)?(&\w+(=[\w-]*)?)*)?$