URL 验证或:我如何学会停止担心并热爱用户

每个 web 开发人员都会有一段时间必须进行某种类型的输入验证。表单不是博客文章,用户可以在电子邮件字段中诗意地表达他们对雅虎邮箱的喜爱。最终,需要进行字数限制、检查特定字符以及阻止用户发送垃圾 post 请求的简单验证技术。

但是,如果您需要验证 url 该怎么办?为了给问题添加另一层,如果您只想要 url 的主机名,没有路径,没有协议,只需要“dubya dubya dubya 点”(www.) 和 .com.

,该怎么办?

我们首先要知道 url 是否是 url。链接需要二级域名和顶级域名(分别为 walmart.com 中的 walmart 和 .com)以及方案 (https://)。如果没有这些部分,链接就不会链接到任何内容,并且与一行文本没有什么不同。

URL 验证或:我如何学会停止担心并热爱用户

但是现在我们知道了 url 的各个部分,我们到达了一个分叉点或开发路径。当数据发送到服务器时,验证是否应该限制现场用户或清理用户输入?

这两种选择都有优点和缺点:

提交前验证

如果您限制用户提交无效的 url,那么您可以通过强制用户提交您需要的确切输入结构来轻松获取服务器端的数据,而无需任何额外的工作。在这种情况下,输入元素的模式属性与一些正则表达式相结合将允许一些良好的老式字段验证。

这是此方法的一个示例:

<input type="text" pattern="https?://.*"

但是,它也有限制用户的缺点。它要求用户输入特定的部分,如果您只需要一个 .com,那么长的正则表达式模式可能有点过头了。

提交后验证

另一方面,如果您选择在用户提交数据后清理数据,则它允许用户输入任何内容,并让服务器决定如何处理数据。 javascript 的 url 构造函数会为您进行验证,如果输入无效,则返回 typeerror,并且还允许您提取 url 的特定部分,例如来源或主机名。

这是此方法的一个示例:

export const formatWebsiteAfterDomain = (website: string): string => {  if (!website.trim().length) {    return '';  }  const regEx = /:///;  const websiteTrimmed = website.trim();  const hasProtocol = regEx.exec(websiteTrimmed);  const updatedWebsite = hasProtocol    ? websiteTrimmed    : `https://${websiteTrimmed}`;  try {    const url = new URL(updatedWebsite);    return hasProtocol ? url.origin : url.origin.replace('https://', '');  } catch (_err) {    return websiteTrimmed;  }};

但是,由于您为用户的输入提供了很大的自由度,因此需要在服务器处理数据的方式上做出一些妥协。如果用户输入了无效的 url,您会如何处理它?您是否使用 typeerror 响应并通知用户,还是只允许服务器使用用户发送的内容?此外,url 构造函数通过检查是否存在方案(https:// 或 http://)来验证输入,这对于您的使用来说可能验证太少了。

最后,所采取的路径取决于问题的具体边缘情况。两种解决方案的组合可能是最全面、最通用的,或者其中一种选择可能就足够了。用户可以输入任何内容,您的解决方案将根据您愿意给予用户的自由度来确定。 然而,仍然普遍的是,用户输入任何内容的能力总是会迫使用户和开发人员做出某种妥协(通常开发人员会获得特定的输入模式,而用户会使用他们的应用程序)。

但是,由于用户输入的特殊性是永恒的,因此总会有开发人员疯狂地推出解决方案,以便当用户尝试将图像粘贴到表单的 url 字段时,他们的 web 应用程序不会崩溃。

以上就是URL 验证或:我如何学会停止担心并热爱用户的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1490196.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 13:00:44
下一篇 2025年12月19日 13:00:57

相关推荐

  • 掌握 JavaScript 中的 URL API

    作为 web 开发人员,我们经常与 url 打交道。无论我们是解析查询字符串、操作路径还是简单地构建链接,url 都是 web 开发的基本组成部分。值得庆幸的是,javascript 为我们提供了一个强大的 api 来处理 url:url api。 在这篇博文中,我们将深入研究 url api,通过…

    好文分享 2025年12月19日
    000
  • 记录 Nodejs 应用程序的最佳实践

    作为一名 node.js 开发人员,在调试、监控和维护应用程序时,日志记录几乎就是一切。但您是否使用日志记录最佳实践?让我们探索一些可以将您的 node.js 应用程序提升到新水平的日志记录技术。 要了解更多信息,您可以查看完整的博客文章。 1. 温斯顿:伐木界的瑞士军刀 ?工具:温斯顿? 描述:n…

    2025年12月19日
    000
  • Nodejs v env 文件、导入模块和权限模型

    node.js v20.6 已发布,其中包含令人惊叹的新功能,这些新功能是 2023 年 10 月 24 日起 lts 版本的一部分。让我们拭目以待! ini 配置文件 告别 dotenv 包,现在 node.js 可以从 .env 文件加载环境变量。 node –env-file path/to…

    2025年12月19日
    000
  • JavaScript 回调中的控制反转:为什么 Promise 是答案

    回调函数是作为参数传递给另一个函数的函数,然后在外部函数内部调用该函数以完成某种例程或操作。可以通过两种方式调用回调:同步和异步。这是 javascript 中最基本的异步模式。 例如: A和B现在发生,在主JS程序的直接控制下。但是 C 被推迟到稍后发生,并在另一方的控制下,在本例中是 ajax(…

    2025年12月19日 好文分享
    000
  • 与 CSS-in-JS 分手

    JS 中的 CSS “css-in-js”是一个从样式组件开始并在 javascript 中定义样式的流程。 样式组件、Emotion、Mantine 等 优点 适用范围小。您可以通过使用 css 模块来缩小 CSS 范围与组件定义在同一位置。 (并置)可以使用Javascript变量。 坏处 存在…

    2025年12月19日 好文分享
    000
  • 如何将shadcn添加到现有项目中

    如果您是一名 web 开发人员,您很可能听说过 shadcn/ui,它是基于 radix ui 的最流行的组件库之一。在这篇文章中,我们将探讨如何将 shadcn 添加到现有项目中。 根据您的项目设置方式以及您使用的框架,将 shadcn 添加到现有项目将会有所不同。当使用 shadcn 使用此库时…

    2025年12月19日
    000
  • Type ✔ Vs Interface ❌:为什么在 TypeScript 中应该选择 Type 而不是 Interface

    我找到了一个解决方案,您应该始终使用类型而不是接口。让我们来分析一下原因吧!! 接口只能指定对象,但类型别名可以指定对象以及其他一切。假设我们有一个地址字段,并且您将使用类型定义其类型,如下所示: type address = string;const address: address = ‘123…

    2025年12月19日
    000
  • 为什么 TypeScript 比 JavaScript 更好:现代 Web 开发的主要优势

    对于 web 开发人员来说,为特定项目选择正确的编程语言或工具至关重要。最近 typescript 的受欢迎程度不断增加,现在它已经与 javascript 展开了正面交锋,这有很多正当的理由。在这篇博客中,我将通过一些展示其优点的示例向您展示为什么您可能选择使用 typescript 而不是 ja…

    2025年12月19日
    000
  • JavaScript 初学者简介

    了解 JavaScript: javascript 是一种强大且多功能的编程语言,已成为现代 web 开发不可或缺的一部分。从创建交互式用户界面到处理复杂的后端逻辑,javascript 都能做到。无论您是刚刚入门还是想要加深理解,这篇文章都将指导您了解每个开发人员都应该了解的 javascript…

    2025年12月19日 好文分享
    000
  • 使用薪资计算器简化团体付款:平衡分摊费用的 Web 应用程序

    总长DR 管理团体付款可能是一个复杂且容易出错的过程,通常会导致混乱和差异。本文介绍了 pay calculator,这是一款旨在简化团体付款计算的 web 应用程序。该应用程序利用常见的网络技术,提供用户友好的界面,以确保准确、高效的支付分配。这也是一个开源项目,您可以在 https://gith…

    2025年12月19日
    000
  • 为 Reddit API 构建 Nodejs 包装器:分步指南

    为 reddit api 构建 node.js 包装器:分步指南 在现代开发中,api 包装是一项至关重要的技能。封装 api 允许开发人员创建更具可读性、可维护性和可扩展性的代码,最终提高开发效率。今天,我们将探索如何在 node.js 中构建一个简单而有效的包装器来与 reddit 的 api …

    2025年12月19日
    000
  • 表情符号化

    表情符号 emojify 是一个可自定义的表情符号轨迹 javascript 库,可跟随鼠标光标,将趣味性和个性嵌入到任何网页中。 在 github 上为项目加注星标 安装 cdn 使用 cdn 导入 emojify。 import emojify from ‘https://cdn.jsdeliv…

    2025年12月19日
    000
  • NodeJS 开发的未来:趋势、挑战和机遇

    简介NodeJS 彻底改变了开发人员进行服务器端编程的方式。作为一个强大的、事件驱动的运行时环境,它使 JavaScript(传统上的客户端语言)成为服务器端的强大玩家。凭借其非阻塞、异步特性,NodeJS 使开发人员能够构建可扩展的高性能应用程序。当我们展望未来时,了解 NodeJS 开发不断发展…

    2025年12月19日
    000
  • React vs Vue vs Angular:如何选择正确的框架?

    选择正确的框架对于项目的成功至关重要,因为它会影响性能、可扩展性以及与现有系统集成的难易程度。它还会影响开发速度、对功能要求的遵守以及未来更新和支持的难易程度。 反应 React 是一个用于构建用户界面的开源 JavaScript 库,由 Meta 开发。其主要目标是简化交互式和动态 Web 应用程…

    2025年12月19日
    000
  • 使用 Javascript 实现各种树算法

    简单的树 我们需要始终从简单的算法开始,然后一步步走向复杂的算法。简单的树二叉树 class simpletree { constructor(value) { this.value = value; this.children = []; } insertchild(value) { const …

    2025年12月19日
    000
  • 简化本地化

    本地化在现代 web 开发中至关重要,但往往很麻烦。管理翻译文件、确保一致性和集成更新可能会变得繁重,尤其是在大型代码库中。传统的 i18n 库需要开发人员手动处理这些复杂性,从而导致效率低下和潜在的错误。 现有 i18n 库的问题 许多现有的 i18n 库要求开发人员: 手动创建和管理 json …

    2025年12月19日
    000
  • 揭开互联网的魔力

    ?开发者们! 有没有想过你如何能够观看那些搞笑的猫视频,查看你的社交媒体,或者一动不动地点一份披萨?这一切背后的魔力就是互联网。今天,我们将一起探索这个迷人的世界,相信我,这将是一次有趣的旅程! 一切是如何开始的 让我们跳进虚拟时间机器,将表盘拨到 1960 年代。一个房间里装满了巨型计算机和一群来…

    2025年12月19日
    000
  • 使用 Formity 在 React 中创建动态、多步骤表单

    构建现代 Web 应用程序时,表单通常成为用户体验的关键部分。无论是收集用户数据、提供多步骤向导还是构建交互式调查,创建动态和响应式表单的挑战很快就会变得难以承受。输入 Formity,这是一个 npm 包,它消除了在 React 中创建表单的痛苦。 什么是形式? Formity 是一个高级表单构建…

    2025年12月19日
    000
  • JS 中的常量以及柏拉图和亚里士多德与它有什么关系

    在我看来,后辈将代码组件视为物质的东西,而前辈则更多地处理理想的类别。或者也许这取决于一个人的世界观而不是他们的专业水平? 有时在代码审查期间,我会遇到代码,其中开发人员使用常量table_width而不是常量car_width,因为这是他找到的第一个具有合适值的常量。 当开发人员根据常量的值而不是…

    2025年12月19日
    000
  • 开始使用 Vercel

    vercel 是一个流行的前端应用程序部署平台。它提供了一个命令行界面 (cli),允许您与 vercel 项目交互并高效部署应用程序。以下是一些常见的 vercel cli 命令及其用途: 安装 使用vercel cli之前,需要安装它。你可以使用 npm 来做到这一点: npm install …

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信