允许相对和绝对url的Javascript url验证
Javascript url validation allowing relative and absolute urls
我试图验证一个字段,以允许相对和绝对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源代码中提取的。如果可以将其修改为也接受相对url,那将是完美的,但这超出了我的能力范围。
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;
前面的^
和后面的$
意味着模式必须匹配整个字符串,而不仅仅是其中的一部分。
edit也就是说,模式还有其他问题。首先,&
(&
)的HTML实体需要只是"&"。在[]
组中,斜杠不需要转义,我们也不需要"g"后缀。剩下的是:
var urlRegex = /^(?:('/?['w-]+)('/['w-]+)*'/?|(((http|ftp|https):'/'/)?['w-]+('.['w-]+)*(['w.,@?^=%&:/~+#-]*['w@?^=%&/~+#-])?))$/i;
再次编辑 -哎呀,还需要将整个内容包起来
我写了一篇关于URI验证的文章,包括RFC3986定义的所有不同URI组件的代码片段:
正则表达式URI验证
你可以在那里找到你要找的东西。但是请注意,几乎任何字符串都表示有效的URI——甚至是空字符串!
相关文章:
- Decode URL Javascript/JQuery
- 阅读重写URL-javascript
- 出现在Twitter帖子中的页面URL - Javascript
- 从图像URL javascript html保存图像文件
- WebView加载URL(“javascript:XYZ”)在我的网络视图中执行了好几次
- 如何将javascript添加到url javascript中
- 获取请求的页面url javascript
- 通过网络浏览器从 URL javascript 读取文件
- window.location.url Javascript
- 以字符串形式返回 HTML 内容,给定 URL.Javascript 函数
- 在页面加载时将变量附加到 URL |JavaScript
- 来自 url javascript 的 Prase 查询字符串
- 从url javascript中提取部件
- 在给定URL Javascript/Jquery函数的情况下,以字符串形式返回HTML内容
- 正则表达式匹配特定的URL JavaScript
- 干净的方式给MVC url javascript库
- 如果数据包含URL, Javascript将无法解析JSON
- XMLHTTP从变量而不是url - javascript
- 在URL javascript中传递时间值出错
- 包括外部URL javascript文件