【问题标题】:URI validation in JavaScriptJavaScript 中的 URI 验证
【发布时间】:2012-07-16 17:07:58
【问题描述】:

什么是仅使用 JavaScript 来验证 URI 是否适用于 Android 的稳健方法(不一定是正则表达式,是吗?)?

即在Android SDK端的Java中不做检查;它是使用 JavaScript 在网页中完成的。

编辑:“适用于 Android”是指 Android 可以使用该 URI 找到响应 Intent 的 Activity。

【问题讨论】:

  • javascript 中的 URI 验证从来都不是健壮的。
  • 这正是我想知道的。我以为我只是疯了。谢谢!
  • 如果您不介意,我想将您的评论标记为答案。 ;)
  • “验证 URI 是否有效”是什么意思?您的意思是验证它是否采用有效的 URI 格式?或者你的意思是 URI 实际上指向一个可访问的网页?前者可以使用检查合法格式的 javascript 来完成。后者需要实际下载网页以查看它是否存在并且可用。
  • @jfriend00 这是个好问题。我的意思是,Android 有一个 Activity 来响应带有该 URI 的 Intent。我会更新问题。谢谢!

标签: javascript android-2.1-eclair


【解决方案1】:

Javascript 从来没有像后端那么健壮,但是周围有很多不错的正则表达式。

这在Trying to Validate URL Using JavaScript的另一篇文章中有介绍

我认为最好的答案如下

有人提到了 Jquery Validation 插件,如果你只是想验证 url,似乎有点过头了,这是插件中的 regex 行:

return this.optional(element) || /^(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.test(value);

这是他们的来源:http://projects.scottsplayground.com/iri/

【讨论】:

【解决方案2】:

对于 URI(它是 URL 的超集)来说,一个好的正则表达式肯定是 https://github.com/jhermsmeier/uri.regex。不幸的是,它还没有涵盖所有类型的 URI。但是,它可以在 Chrome 中使用。

http://jmrware.com/articles/2009/uri_regexp/URI_regex.html 提供了更简单的版本。 由于多行,我无法在此处包含它。

这里是使用 JUnit 测试用例的分步开发:http://timezra.blogspot.de/2010/05/regex-to-validate-uris.html 这在这里不起作用“无效的正则表达式:无效的组”

【讨论】:

    【解决方案3】:

    只需尝试在您的代码中调用:

    const url = new URL(urlToCheck)
    

    如果给定的urlToCheck 或生成的 URL 不是有效的 URL,
    则抛出异常.....然后你就知道了......

    见:

    https://javascript.info/url

    https://developer.mozilla.org/en-US/docs/Web/API/URL/URL

    【讨论】:

    • 这不是真的。您可以输入一个非 URL 函数,它会返回而不会出错。
    • new URL('d:/urlToCheck.com') 不抛出
    • URI != URL。并非所有 URI 都是 URL。 dev.to/flippedcoding/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多