如何验证一个URL是否合法

在JavaScript中,可以使用正则表达式(RegExp)或使用内置的URL对象来校验一个URL。下面是一些常用的方法以及对应的代码示例:

  1. 使用正则表达式进行校验:
function validateURL(url) {const pattern = /^(https?:\/\/)?(www\.)?[a-zA-Z0-9-]+\.[a-zA-Z]+(\/[^\s]*)?$/;return pattern.test(url);
}console.log(validateURL('https://www.example.com')); // true
console.log(validateURL('www.example.com')); // true
console.log(validateURL('example.com')); // true
console.log(validateURL('not a url')); // false

上述示例使用了一个正则表达式来匹配URL的模式:^(https?:\/\/)?(www\.)?[a-zA-Z0-9-]+\.[a-zA-Z]+(\/[^\s]*)?$,其中:

  • ^ 表示匹配字符串的开头
  • (https?:\/\/)? 表示可选的 “http://” 或 “https://” 的协议部分
  • (www\.)? 表示可选的 “www.” 子域名部分
  • [a-zA-Z0-9-]+ 表示至少一个字母、数字或连字符
  • \.[a-zA-Z]+ 表示一个点和至少一个字母的域名后缀
  • (\/[^\s]*)? 表示可选的路径部分,以斜杠开始,后面跟零或多个非空白字符
  • $ 表示匹配字符串的结尾
  1. 使用URL对象进行校验:
function validateURL(url) {try {new URL(url);return true;} catch (error) {return false;}
}console.log(validateURL('https://www.example.com')); // true
console.log(validateURL('www.example.com')); // false
console.log(validateURL('example.com')); // false
console.log(validateURL('not a url')); // false

上述示例使用了JavaScript内置的URL对象,通过尝试创建一个新的URL实例来判断URL的有效性。如果URL无效,将抛出一个错误并被catch语句捕获,返回false;如果URL有效,则返回true

除此之外,还可以使用NPM包来验证。在npm上有很多可以用来校验URL的包,以下是其中一些常用的包:

  1. valid-url:提供了一种简单的方法来验证URL。它支持验证URL的协议、域名和路径,并可以设置额外的选项来验证更严格的URL模式。

    const validUrl = require('valid-url');console.log(validUrl.isUri('https://www.example.com')); // true
    console.log(validUrl.isUri('www.example.com')); // false
    console.log(validUrl.isUri('example.com')); // false
    console.log(validUrl.isUri('not a url')); // false
    
  2. url-regex:提供了一个正则表达式,可以用来检查字符串中是否包含URL。

    const urlRegex = require('url-regex');console.log(urlRegex().test('Visit example.com')); // true
    console.log(urlRegex().test('Visit www.example.com')); // true
    console.log(urlRegex().test('not a url')); // false
    
  3. is-url:检测给定的字符串是否是合法的URL。

    const isUrl = require('is-url');console.log(isUrl('https://www.example.com')); // true
    console.log(isUrl('www.example.com')); // true
    console.log(isUrl('example.com')); // true
    console.log(isUrl('not a url')); // false
    
  4. valid-urlurl-regexis-url都只能进行基本的URL验证。如果需要更复杂的URL验证,可以使用valid-url和其他验证库(如joiyup等)结合使用。

这些包提供了不同的方法来校验URL,并且可以根据具体的需求选择合适的包。在选择包时,要确保包的活跃度、文档完整性和社区支持等因素。


看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/207062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Caliper对Fabric地basic链码进行性能测试

如果你需要对fabric网络中地合约进行吞吐量、延迟等性能进行评估,可以使用Caliper来实现,会返回给你一份网页版的直观测试报告。下面是对test-network网络地basic链码地测试过程。 目录 1. 建立caliper-workspace文件夹2. 安装npm等3. calipe安装4. 创建…

使用TransBigData组件实现个人手机定位功能

目录 一、引言 二、技术背景 三、实现逻辑 四、代码实现 五、优化与注意事项: 六、总结 摘要:随着现代社会对定位服务的需求日益增加,实现个人手机定位功能成为了开发者的研究热点。本文详细阐述了如何使用Python和TransBigData组件实现…

Python 从入门到精通 学习笔记 Day03

Python 从入门到精通 第三天 今日目标 流程控制语句、退出循环、练习学习的内容 一、流程控制语句 流程控制的三种方式:顺序语句、双分支语句、循环语句 双分支语句 Python 的双分支语句使用if-else语句实现。 其语法结构如下: if条件:#如果条作为真&#xff…

Facebook广告报告指标CPC

在Facebook广告中,CPC可以作为一个关键指标来评估广告效果和投资回报。较低的CPC意味着广告主能以更低的价格获得更多的点击量,从而降低广告投放成本。而较高的CPC可能暗示着广告主需要更大的预算才能获得相同数量的点击。本文小编将讲讲Facebook广告报告…

k8s上安装KubeSphere

安装KubeSphere 前置环境安装nfs-server文件系统配置nfs-client配置默认存储创建了一个存储类metrics-server集群指标监控组件 安装KubeSphere执行安装查看安装进度 前置环境 下载配置我都是以CentOS 7.9 安装 k8s(详细教程)文章的服务器作为示例,请自行修改为自己的…

2024年软考科目怎么选?(选科指引)

新手在准备报考软考时,都会遇到这样的一个问题——科目这么多,我适合考什么?要想知道自己适合报什么科目,就需要了解每个科目是什么,考什么等一系列的问题。今天给大家分享一下。 软考包含什么科目? 软考…

facebook广告相比谷歌广告的优势

Facebook广告相比谷歌广告的优势主要体现在以下方面: 用户数据丰富:Facebook拥有庞大的用户数据,包括人口、兴趣、行为等多个维度,这些数据可以帮助广告主更准确地定位到目标受众。相比之下,谷歌广告的用户数据相对较…

android快速网络请求之android-networking

今天介绍一个知道的人不多的库,写个简单的页面什么的。用起来很爽?如果你疑惑那么多开源的网络库为啥不用? 因为这个简单方便。拿来就用。经过这几天的实践。确实可以。推荐一下 如果你需要 GITHUB 首先。引入依赖 implementation com.ami…

MySQL 数据迁移要点

目录 1. 相同版本的迁移 2. 不用版本的迁移 3. 不同数据库的迁移 数据库迁移就是把数据从一个系统移动到另一个系统上,迁移过程其实就是在源数据库备份和目标数据库恢复的过程组合。迁移的原因是多种多样的,比如: 需要安装新的数据库服务…

elasticsearch中LessThen遇到的坑

开发中&#xff0c;使用到LessThen-小于某个参数的逻辑查询&#xff0c;如下&#xff1a; /// <summary> /// 查询状态已发布&#xff08;状态小于2&#xff09;的政策要闻分页 /// </summary> /// <param name"input"></param> /// <re…

使用OkHttp上传本地图片及参数

下面以一个例子来讲解在项目中如何使用OKHttp来对本地图片做个最简单的上传功能&#xff0c;基本上无封装&#xff0c;只需要简单调用便可&#xff08;对于OKHttp的引入不再单独做介绍&#xff09;。 1&#xff1a;构建上传图片附带的参数&#xff08;params&#xff09; Map…

2.vue学习笔记(目录结构+模板语法+属性绑定)

1.目录结构 1.vscode ——VSCode工具的配置文件夹 2.node_modules ——Vue项目的运行依赖文件夹 3.public ——资源文件夹&#xff08;浏览器图标&#xff09; 4.src ——源码文件夹 5..gitgnore ——git忽略文件 6.index.html ——如果html文件 7.package.json —…

基于SpringBoot+Vue学生成绩管理系统前后端分离(源码+数据库)

一、项目简介 本项目是一套基于SpringBootVue学生成绩管理系统&#xff0c;主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目可以直接作为bishe使用。 项目都经过严格调试&#xff0c;确…

ElasticSearch中的分析器是什么?

在Elasticsearch中&#xff0c;分析器&#xff08;Analyzer&#xff09;是一个用于文本分析的重要组件。它定义了如何将文本分解成单词和子词&#xff0c;这对于索引和搜索是非常重要的。 在Elasticsearch中&#xff0c;分析器定义了如何将文本转换为可以被索引和搜索的形式。…

虚幻学习笔记10—C++函数与蓝图的通信

一、前言 除了上一章C变量与蓝图通信讲的变量能与蓝图通信外&#xff0c;还有函数和枚举也可以和蓝图通信。函数的关键字为”UFUNCTION“、枚举的关键字为”UENUM“。 二、实现 2.1、BlueprintCallable蓝图中调用 该函数时带执行的&#xff0c;带入如下。编译成功后在蓝图中输…

macOS 获取文件夹大小

macOS 获取文件夹大小 获取文件夹大小的扩展如下&#xff1a; extension URL {var fileSize: Int? { // in bytesdo {let val try self.resourceValues(forKeys: [.totalFileAllocatedSizeKey, .fileAllocatedSizeKey])return val.totalFileAllocatedSize ?? val.fileAll…

来自Sui的温馨建议:保护您的Web3私钥

当您安装一个钱包并创建Sui账户时&#xff0c;钱包包含一个公钥和一个私钥。保护好私钥的安全非常重要&#xff0c;从而可以保护您的Sui资产&#xff0c;包括钱包中的任何tokens。 公钥加密技术是几十年前开发的&#xff0c;是当今互联网上大多数安全交易的基础&#xff0c;包…

Navicat Premium 16 for Mac/Windows:高效的数据库开发工具

Navicat Premium 16是一款功能强大的数据库开发工具&#xff0c;为开发人员提供了全面的工具和功能&#xff0c;帮助他们更高效地进行数据库开发和管理。不论是初学者还是专业开发人员&#xff0c;Navicat Premium 16都能满足他们的需求&#xff0c;并提供直观、易用的界面。 …

【深度学习】AlexNet网络实现猫狗分类

【深度学习】AlexNet网络实现猫狗分类 AlexNet简介 AlexNet是一种卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;模型&#xff0c;它在2012年的ImageNet图像分类挑战赛中取得了重大突破&#xff0c;引发了深度学习在计算机视觉领域的热潮…

为“异常”努力是值得的

异常是OO语言处理错误的方式,在C中&#xff0c;鼓励使用异常。侯捷再书中谈起异常&#xff0c;“十年前撰写“未将异常考虑在内的”函数是为一种美好实践&#xff0c;而今我们致力于写出“异常安全码”。”可见异常安全的重要。 说起异常安全&#xff0c;首先就要是异常的出现…