Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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
允许相对和绝对url的Javascript url验证_Javascript_Regex_Url Validation - Fatal编程技术网

允许相对和绝对url的Javascript url验证

允许相对和绝对url的Javascript url验证,javascript,regex,url-validation,Javascript,Regex,Url Validation,我正在尝试验证一个字段以允许相对和绝对URL。我使用的是来自的正则表达式,但它允许在url中使用空格 var urlRegex = new RegExp(/(\/?[\w-]+)(\/[\w-]+)*\/?|(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?)/gi); 例如: // this should work this/will/work.as

我正在尝试验证一个字段以允许相对和绝对URL。我使用的是来自的正则表达式,但它允许在url中使用空格

var urlRegex = new RegExp(/(\/?[\w-]+)(\/[\w-]+)*\/?|(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?)/gi);
例如:

// this should work
this/will/work.aspx?say=hello 
http://www.example.com/this/will/work.aspx?say=hello

// this shouldn't work but does
and/this will also work/even though it shouldn't
and/this-shouldn't/but it does/also
下面的代码是我最初用来验证绝对URL的代码,它工作得非常好。如果我没记错的话,我是从jquery源代码中提取的。如果这可以修改为也接受相对网址,那将是完美的,但这是我的联盟

var urlRegex = new RegExp(/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i);

我认为您只需要锚定模式,使其与整个字符串匹配:

var urlRegex = /^(\/?[\w-]+)(\/[\w-]+)*\/?|(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?)$/gi;
前导的
^
和尾随的
$
意味着模式必须匹配整个字符串,而不仅仅是其中的一部分

尽管如此,该模式还有其他问题。首先,那些
&
&;
)的HTML实体只需要是“&”。斜杠不需要在
[]
组中转义,我们也不需要“g”后缀。这就给我们留下了:

var urlRegex = /^(?:(\/?[\w-]+)(\/[\w-]+)*\/?|(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)*([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?))$/i;

再次编辑-oops还需要包装整个内容。

我认为您只需要锚定模式,使其与整个字符串匹配:

var urlRegex = /^(\/?[\w-]+)(\/[\w-]+)*\/?|(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?)$/gi;
前导的
^
和尾随的
$
意味着模式必须匹配整个字符串,而不仅仅是其中的一部分

尽管如此,该模式还有其他问题。首先,那些
&
&;
)的HTML实体只需要是“&”。斜杠不需要在
[]
组中转义,我们也不需要“g”后缀。这就给我们留下了:

var urlRegex = /^(?:(\/?[\w-]+)(\/[\w-]+)*\/?|(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)*([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?))$/i;

再次编辑-oops还需要对整个内容进行包装。

我写了一篇关于URI验证的文章,其中包含了所有各种URI组件的代码片段,如以下所述:


你可以在那里找到你想要的东西。但是请注意,几乎任何字符串都表示有效的URI—即使是空字符串

我写了一篇关于URI验证的文章,其中包含了所有不同URI组件的代码片段,如下所述:


你可以在那里找到你想要的东西。但是请注意,几乎任何字符串都表示有效的URI—即使是空字符串

在这些示例中,您根本不需要调用RegExp构造函数。您是说我可以这样做<代码>var urlRegex=/…/对吗?是的-等等,我想我有一个答案。在这些示例中,您根本不需要调用RegExp构造函数。您是说我可以这样做<代码>var urlRegex=/…/对吗?是的-等等,我想我有答案了。我已经更新了模式。用正则表达式解析URL有点棘手。多亏了Pointy,就快到了。它不允许
/other/url.aspx
,但它允许
other/url.aspx
以及绝对url。谢谢你的回答,我真的很感谢你的帮助。我想问题是分组有点不合适。“/other/url.aspx”部分不起作用,因为正则表达式的左侧部分不允许“.aspx”,而右侧允许。但是,右侧不允许使用前导斜杠。我认为我们需要的是一个与协议和主机匹配的右侧部分,然后在第一个“/”之前使整个组成为可选的,然后整个组也可以是可选的(对于“foo/bar.aspx”)。我已经更新了模式。用正则表达式解析URL有点棘手。多亏了Pointy,就快到了。它不允许
/other/url.aspx
,但它允许
other/url.aspx
以及绝对url。谢谢你的回答,我真的很感谢你的帮助。我想问题是分组有点不合适。“/other/url.aspx”部分不起作用,因为正则表达式的左侧部分不允许“.aspx”,而右侧允许。但是,右侧不允许使用前导斜杠。我认为我们需要的是与协议和主机相匹配的右侧部分,然后在第一个“/”之前使整个组成为可选的,然后整个组也可以是可选的(对于“foo/bar.aspx”)。我正在查看路径regex,但我很难让它在javascript中语法上工作@bflemi3-双击文章中的正则表达式,会弹出一个包含正确格式代码段的文本框。您可以通过下拉菜单选择Javascript语法。干杯。我正在查看路径正则表达式,但在javascript中语法上无法使用它@bflemi3-双击文章中的正则表达式,会弹出一个包含正确格式代码段的文本框。您可以通过下拉菜单选择Javascript语法。干杯