JS中常用正则表达式举例二

JS正则表达式匹配域名

大家好,有关正则表达式的基本知识在其它文章中已做了介绍:
JS属性&方法详解

下面一起来看看JS中利用正则表达式匹配字符串的常用例子:

匹配域名

首先,对于域名的匹配问题,我们可以列出符合条件的正则表达式
在此过程中,出现了问题,不能兼容 -(短横杆) 连续出现 和 规定位数在 63 位以内的问题(在本例的基本规定中,没有说明不可以 -(短横杆) 开头或者结尾,注:本例规定不严谨,只是举个例子):

var pattern = /^[a-z0-9]+(\-[a-z0-9]+)*$/i;

emmmmm,上边的正则表达式还是错误的,我们可以从反面考虑问题,如果把错误的情况取反,不就成功了吗?

规定:

(关于域名的匹配问题,在此处只做了基础规定,实际上涉及到了域名背后的很多问题,很抱歉,目前小白能力有限,不能做深入了解)

  • 域名不能超过63位;
  • 域名中的字母只能为字母(a-z)、数字(0-9)、-(短横杆);
  • -(短横杆)不能连着出现两次;
    看到了规定,我们开始“反其道而行之”,考虑错误情况:
  • 域名超过63位:^.{64,}$ ;
  • 含有除a-z、0-9、- 以外的字符: [^a-z0-9-] ;
  • -(短横杆)连着出现两次或多次:-{2,};
    但凡出现上述任意一种情况,均为错误的域名
var pattern = /^.{64,}$|[^a-z0-9\-]|\-{2,}/;

对于上述正则表达式,我们要学会:很多时候,正则表达式可以从反面考虑问题

程序执行效果图:

(为了让效果对比明显,特意设置了三个输入文本框,进行对比)

代码

(小细节均在代码注释中列出,如果不合适的地方,还请指导)
欢迎有兴趣的小伙伴可以一起探讨啊

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>域名匹配</title><style>.default {border: 3px solid #a5a3a3a1;}.success {border: 3px solid #06fd3b;}.failure {border: 3px solid #fd3e04;}</style>
</head><body><!-- 为了对比效果明显,设置了三个文本输入框 --><label for="domainName">域名:</label><input type="text" name="domainName" id="domainName" class="domainName default"><br/><br/><label for="domainName">域名:</label><input type="text" name="domainName" id="domainName" class="domainName default"><br/><br/><label for="domainName">域名:</label><input type="text" name="domainName" id="domainName" class="domainName default"><!-- script语句 --><script>var domainNames = document.querySelectorAll(".domainName");domainNames.forEach(function(domainName) {domainName.addEventListener("keyup", function(e) {// 正则表达式的定义两种方式:// var pattern = /^[a-z0-9]+(\-[a-z0-9]+)*$/i;// 从反面考虑问题,出现任意一种不匹配的情况就出错var pattern = /^.{64,}$|[^a-z0-9\-]|\-{2,}/;// var pattern = new RegExp("/^.{64,}$|[^a-z0-9\-]|\-{2,}/");// 获取input输入框所输入的值var domainName = e.target.value;// 将规定的pattern与input输入框中所输入的值进行匹配if (!pattern.test(domainName)) {// 匹配成功,添加success样式,移去failure样式if (!e.target.classList.contains("success")) {e.target.classList.add("success");}if (e.target.classList.contains("failure")) {e.target.classList.remove("failure");}} else {// 匹配不成功,添加failure样式,移去success样式if (!e.target.classList.contains("failure")) {e.target.classList.add("failure");}if (e.target.classList.contains("success")) {e.target.classList.remove("success");}}});});</script>
</body></html>

代码还有优化之处,欢迎小伙伴一起探讨学习,也欢迎大佬指导教学!

JS正则表达式匹配域名相关推荐

  1. js正则表达式匹配span标签

    1.js正则表达式匹配span标签 const spans = htmlStr.match(/<span (.*?)>(.*?)<\/span>/g) 2.js正则表达式–获取 ...

  2. JS正则表达式匹配手机号

    JS中常用正则表达式举例一 JS正则表达式匹配手机号 大家好,有关正则表达式的基本知识在其它文章中已做了介绍: JS属性&方法详解 下面一起来看看JS中利用正则表达式匹配字符串的常用例子: 手 ...

  3. js正则表达式匹配字符串与优化过程

    前言 有时候需要实现对js源文件中的url字符串做拦截预处理,或者前端js语法高亮,或者需要对动态加载的关键源码做混淆保护,在某些步骤实现之前,有一个步骤是需要提炼出所有的合法字符串. 目标:检测源文 ...

  4. Js读取Cookie中指定字段的值,Js中读取某个Cookie,Js中根据Cookie的key得到对应的value,Js正则表达式匹配指定的Cookie

    Js中想要读取Cookie中指定字段的值,可以遍历Cookie根据指定Key提取Cookie,或者使用正则表达式匹配Cookie,代码如下: /*** @description: 遍历cookie得到 ...

  5. js正则表达式匹配汉字

    假期老师布置了一个大作业,需要用正则表达式匹配一下 uniocde编码的汉字,但是网上千篇一律都是 /[\u4e00-\u9fa5]/ ,结果当然没有通过老师的作业检查(当然问题不仅仅只有这一点). ...

  6. js正则表达式-匹配空格/数字范围/网址/电话等常用表达式

    1.项目需要匹配gh字符,要求gh前面有空格,后面有无空格都可以. 思路如下: \s : 表示 space ,空格 +: 一个或多个 ^: 开始,^\s,以空格开始 $: 结束,\s$,以空格结束 | ...

  7. python正则表达式匹配网址中的域名_正则表达式匹配域名、网址、url

    DNS规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母.标号中除连字符(-)外不能使用其他的标点符号.级别最低的域名写在最左边,而级别最高的域名写在最右边.由多 ...

  8. js正则表达式匹配数字

    普通的一位数字到几位数字的用/^\d{m,n}$/,如果固定死位数则只填m; 如果是特定数字范围的,比如0-64这种,先匹配一位的([0-9])或者(\d),然后匹配两位的10-59-----([1- ...

  9. JavaScript 技术篇-js正则表达式匹配字符串左右两边是否包含空格

    /(^\s)|(\s$)/ 这个是匹配左右两边的空格. 演示如下: /(^\s)/ 是匹配左侧的空格. 演示如下: 同理 /(\s$)/ 是匹配右边的空格. 只要包含空格是 /(\s)/. 还可以通过 ...

  10. js正则表达式匹配纯中文或纯英文

    (项目用到,记录一下) 匹配纯中文 ---------------------------------------------------------------------------------- ...

最新文章

  1. 个人微信公众号已开通,欢迎各位小伙伴关注
  2. C#泛型委托,匿名方法,匿名类
  3. Erlang中使用变量的简单示例
  4. bootstrap 取消_学习写个网站(5)Bootstrap学习2
  5. 95-180-050-源码-Watermark-允许固定数量延迟的分配器(BoundedOutOfOrdernessTimestampExtractor)
  6. python pandas写入_51-python3 pandas读写excel
  7. CSDN插件限时内测,新用户抢永久免费去广告特权
  8. 数组的filter()方法
  9. 模板解压下来是php文件,smarty模板解压完将libs目录放到哪?
  10. java c s聊天程序_java----------C/S编程-----简单聊天程序
  11. 【韩语图片文字识别】如何快速识别韩语图片文字,将文字变成电子档,进行翻译处理教程
  12. 无法复制:数据错误(循环冗余检查)的解决方法
  13. 第八届ACM趣味编程循环赛重现赛(部分题目)
  14. 数组去重,对象去重,数组对象去重
  15. 一文读懂CPU工作原理、程序是如何在单片机内执行的、指令格式之操作码地址码
  16. SaaS从0到1,产品策略决定成败!
  17. 个人备注:经济学的自学顺序
  18. python语言基础知识要点_Python3的基本知识点(一)
  19. 滴滴外卖首战告捷 美团无(Wang)锡(Xing)沦陷
  20. SWIG入门文档(翻译自官方网站)

热门文章

  1. freemyapps 推荐链接
  2. document 常用事件
  3. 计算机软件主要有哪4中,系统软件通常包括哪四个部分
  4. Python+pyecharts研究周杰伦歌词中的 秘密
  5. 向公有云迁移,需要注意哪些问题
  6. 关于iReport中纸张的大小 换算
  7. 一、用例图、功能模块图、ER图之间的区别和联系
  8. oracle单表空间预估,使用ARIMA和腾讯的Metis时序数据异常检测来预测系统空间容量变化趋势...
  9. C++(18)——温度表达转化
  10. 5600高流明更清晰 NEC CF6600U投影试用