js正则匹配键盘行(或列)连续字符 ,3连连续字符匹配

 js正则匹配键盘行(或列)连续字符 ,3连连续字符匹配。如一些密码校验,

 行键盘 "asd" "l;'"  "&*()" .....等等

 列键盘  1qaz,2wsx.......


/**
 * 判断字符串是否键盘三连(横着、竖着)
 * @param {String} str
 * @returns boolean 是否满足键盘3连键
 */
 function checkKeyboardContinuousChar(str) {
  const c1 = [
    ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+'],
    ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '{', '}', '|'],
    ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ':', '"'],
    ['z', 'x', 'c', 'v', 'b', 'n', 'm', '<', '>', '?']
  ]
  const c2 = [
    ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '='],
    ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\\'],
    ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\''],
    ['z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/']
  ]
  str = str.toLowerCase().split('')
  // 获取坐标位置
  const y = []
  const x = []
  for (let c = 0; c < str.length; c++) {
    y[c] = 0// 当做~`键处理
    x[c] = -1
    for (let i = 0; i < c1.length; i++) {
      for (let j = 0; j < c1[i].length; j++) {
        if (str[c] == c1[i][j]) {
          y[c] = i
          x[c] = j
        }
      }
    }
    if (x[c] != -1) continue
    for (let i = 0; i < c2.length; i++) {
      for (let j = 0; j < c2[i].length; j++) {
        if (str[c] == c2[i][j]) {
          y[c] = i
          x[c] = j
        }
      }
    }
  }
  // 匹配坐标连线
  for (let c = 1; c < str.length - 1; c++) {
    // 横着同一行
    if (y[c - 1] == y[c] && y[c] == y[c + 1]) {
      // 从左往右或者从右往左一排
      if ((x[c - 1] + 1 == x[c] && x[c] + 1 == x[c + 1]) || (x[c + 1] + 1 == x[c] && x[c] + 1 == x[c - 1])) {
        return true
      }
    }
    // 竖着同一列
    if (x[c - 1] == x[c] && x[c] == x[c + 1]) {
      // 从下往上或者从下往下同一列
      if ((y[c - 1] + 1 == y[c] && y[c] + 1 == y[c + 1]) || (y[c + 1] + 1 == y[c] && y[c] + 1 == y[c - 1])) {
        return true
      }
    }
    // 竖着同一列(类似/而不是\的一列)
    if ((x[c - 1] + 1 == x[c] && x[c] + 1 == x[c + 1]) || (x[c - 1] - 1 == x[c] && x[c] - 1 == x[c + 1])) {
      // 从下往上或者从下往下同一列
      if ((y[c - 1] + 1 == y[c] && y[c] + 1 == y[c + 1]) || (y[c + 1] + 1 == y[c] && y[c] + 1 == y[c - 1])) {
        return true
      }
    }
  }
  return false
}

checkKeyboardContinuousChar(",./")

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Editplus 3[1].0 正则表达式类 【1】 正则表达式应用——替换指定内容到尾 【2】 正则表达式应用——数字替换----------------------------Microshaoft@CCF,jiuk2k@CCF 【3】 正则表达式应用——删除每一尾的指定字符 【4】 正则表达式应用——替换带有半角括号的多 【5】 正则表达式应用——删除空----------------------------江德华 软件技巧类 ------------------------------------------------------ 【6】 软件技巧——键盘记录的注意事项 【7】 软件技巧——关闭文档标签的便捷方法 【8】 软件技巧——如何去掉 EditPlus 保存文本文件时的添加后缀提示? 【9】 软件技巧——提示找不到语法文件的解决办法 【10】软件技巧——设置editplus支持其它文字,如韩文----------jackywu1978@LJF 【11】软件技巧——FTP 上传的设置----------------------------李应文2.11汉化版 【12】软件技巧——如何禁用备份文件功能? 【13】软件技巧——添加语法文件、自动完成文件、以及剪辑库文件 工具集成类 ------------------------------------------------------ 【14】工具集成——编译器集成例子(Java、Borland C++、Visual C++、Inno Setup、nsis、C#) 【15】工具集成——让Editplus调试PHP程序----------------------avenger,aukw@CCF 【16】工具集成——打造 PHP 调试环境(二)----------------------老七2.11汉化版 【17】在 WINPE 中集成 EDITPLUS 后续添加 ------------------------------------------------------ 【18】支持带UTF-8标记/不带UTF-8标记的文件 每个步骤都说得很详细了,就没有必要贴图了,体积不要太大才好。 【1】正则表达式应用——替换指定内容到尾 原始文本如下面两 abc aaaaa 123 abc 444 希望每次遇到“abc”,则替换“abc”以及其后到尾的内容为“abc efg” 即上面的文本最终替换为: abc efg 123 abc efg 解决: ① 在替换对话框,查找内容里输入“abc.*” ② 同时勾选“正则表达式”复选框,然后点击“全部替换”按钮 其中,符号的含义如下: “.” =匹配任意字符 “*” =匹配0次或更多 注意:其实就是正则表达式替换,这里只是把一些曾经提出的问题加以整理,单纯从正则表达式本身来说,就可以引申出成千上万种特例。 【2】正则表达式应用——数字替换 (Microshaoft@CCF,jiuk2k@CCF) 希望把 asdadas123asdasdas456asdasdasd789asdasd 替换为: asdadas[123]asdasdas[456]asdasdasd[789]asdasd 在替换对话框里面,勾选“正则表达式”复选框; 在查找内容里面输入“[0-9][0-9][0-9]”,不含引号 “替换为:”里面输入“[\0\1\2]”,不含引号 范围为你所操作的范围,然后选择替换即可。 实际上这也是正则表达式的使用特例,“[0-9]”表示匹配0~9之间的任何特例,同样“[a-z]”就表示匹配a~z之间的任何特例 上面重复使用了“[0-9]”,表示连续出现的三个数字 “\0”代表第一个“[0-9]”对应的原型,“\1”代表第二个“[0-9]”对应的原型,依此类推 “[”、“]”为单纯的字符,表示添加“[”或“]”,如果输入“其它\0\1\2其它”,则替换结果为: asdadas其它123其它asdasdas其它456其它asdasdasd其它789其它asdasd 功能增强(by jiuk2k@CCF): 如果将查找内容“[0-9][0-9][0-9]”改为“[0-9]*[0-9]”,对应1 或 123 或 12345 或 ... 大家根据需要定制 相关内容还有很多,可以自己参考正则表达式的语法仔细研究一下 【3】正则表达式应用——删除每一尾的指定字符 因为这几个字符中也是出现的,所以肯定不能用简单的替换实现 比如 12345 1265345 2345 需要删除每末尾的“345” 这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则
前言   第1章使用JavaScript字符串   1.0简介   1.1连接两个或多个字符串   1.2连接字符串和另一种数据类型   1.3条件比较字符串   1.4在字符串中查找子字符串   1.5从一个字符串提取子字符串   1.6检查一个存在的、非空的字符串   1.7将一个关键字字符串分解为单独的关键字   1.8插入特殊字符   1.9处理textarea的单个   1.10去除字符串末尾的空白   1.11左补充或右补充一个字符串   第2章使用正则表达式   2.0简介   2.1测试一个子字符是否存在   2.2测试不区分大小写的子字符匹配   2.3验证社会安全号码   2.4找到并突出显示一个模式的所有实例   2.5使用新字符串替换模式   2.6使用捕获圆括号交换一个字符串中的单词   2.7使用正则表达式来去除空白   2.8使用命名实体来替代HTML标签   2.9搜索特殊字符   第3章日期、时间和定时器   3.0简介   3.1打印出今天的日期   3.2打印出UTC日期和时间   3.3打印出一个ISO 8601格式日期   3.4把一个ISO 8601格式的日期转换为Date对象可接受的一种格式   3.5创建一个特定的日期   3.6规划未来的一个日期   3.7记录流逝的时间   3.8创建一个延迟   3.9创建重复性定时器   3.10使用带有定时器的函数闭包   第4章使用Number和Math   4.0简介   4.1保持一个递增的计数   4.2把十进制数转换为一个十六进制值   4.3创建一个随机数生成器   4.4随机产生颜色   4.5把表中的字符串转换为数字   4.6把表中一列的所有数字加和   4.7在角度和弧度之间转换   4.8找到页面元素可容纳的一个圆的半径和圆心   4.9计算圆弧的长度   第5章使用数组和循环   5.0简介   5.1循环遍历数组   5.2创建多维数组   5.3从数组创建一个字符串   5.4排序数组   5.5按顺序存储和访问值   5.6以相反的顺序存储和访问值   5.7创建一个新数组作为已有数组的子集   5.8在数组中搜索   5.9将一个多维数组扁平化   5.10搜索和删除或替换数组元素   5.11对每个数组元素应用一个函数   5.12对数组中的每个元素执一个函数并返回一个新数组   5.13创建一个过滤后的数组   5.14验证数组内容   5.15使用一个关联数组来存储表单元素名和值   第6章使用JavaScript函数构建重用性   6.0简介   6.1创建一段可重用的代码   6.2把单个数据值传递到函数   6.3把复杂的数据对象传递给函数   6.4创建一个动态运时函数   6.5把一个函数当做参数传递给另一个函数   6.6实现递归算法   6.7创建能够记住其状态的函数   6.8使用一个通用的科里化函数提高应用程序性能   6.9使用缓存计算(Memoization)来提高应用程序性能   6.10使用匿名函数包装全局变量   第7章处理事件   7.0简介   7.1检测页面何时完成载入   7.2使用Event对象捕获鼠标点击事件的位置   7.3创建一个通用的、可重用的事件处理函数   7.4根据修改的条件来取消一个事件   7.5阻止事件在一组嵌套元素中传播   7.6捕获键盘活动   7.7使用新的HTML 5拖放   7.8使用Safari方向事件和其他移动开发环境   第8章浏览器模块   8.0简介   8.1请求Web页面访问者确认一项操作   8.2创建一个新的、下拉式的浏览器窗口   8.3找到关于浏览器的访问页面   8.4警告Web页面访问者将要离开页面   8.5根据颜色支持更改样式表   8.6根据页面大小修改图像尺寸   8.7在CMS模板页面中创建面包屑路径   8.8将一个动态页面加入书签   8.9针对后退按钮、页面刷新来保持状态   第9章表单元素和验证   9.0简介   9.1访问表单文本输入值   9.2动态关闭或打开表单元素   9.3根据一个事件从表单元素获取信息   9.4当点击单选按钮的时候执一个动作   9.5检查一个有效的电话号码   9.6取消表单提交   9.7阻止重复表单提交   9.8隐藏和显示表单元素   9.9根据其他表单选择修改一个选项列表   第10章调试和错误处理   10.0简介   ……   第11章访问页面元素   第12章创建和删除元素和属性   第13章使用Web页面空间   第14章使用JavaScript、CSS和ARIA创建交互和可访问性效果   第15章创建富媒体和交互应用程序   第16章JavaScript对象   第17章JavaScript库   第18章通信   第19章使用结构化数据   第20章持久化   第21章JavaScript创新用法
前言1   第1章 JavaScript概述5   1.1 JavaScript语言核心8   1.2 客户端JavaScript12   第一部分 JavaScript 语言核心   第2章 词法结构25   2.1 字符集25   2.2 注释27   2.3 直接量27   2.4 标识符和保留字28   2.5 可选的分号30   第3章 类型、值和变量32   3.1 数字34   3.2 文本38   3.3 布尔值43   3.4 null和undefined44   3.5 全局对象45   3.6 包装对象46   3.7 不可变的原始值和可变的对象引用47   3.8 类型转换48   3.9 变量声明55   3.10 变量作用域56   第4章 表达式和运算符60   4.1 原始表达式60   4.2 对象和数组的初始化表达式61   4.3 函数定义表达式62   4.4 属性访问表达式63   4.5 调用表达式64   4.6 对象创建表达式64   4.7 运算符概述65   4.8 算术表达式69   4.9 关系表达式74   4.10 逻辑表达式79   4.11 赋值表达式81   4.12 表达式计算83   4.13 其他运算符86   第5章 语句91   5.1 表达式语句92   5.2 复合语句和空语句92   5.3 声明语句94   5.4 条件语句96   5.5 循环101   5.6 跳转106   5.7 其他语句类型113   5.8 JavaScript语句小结116   第6章 对象118   6.1 创建对象120   6.2 属性的查询和设置123   6.3 删除属性127   6.4 检测属性128   6.5 枚举属性130   6.6 属性getter和setter132   6.7 属性的特性134   6.8 对象的三个属性138   6.9 序列化对象141   6.10 对象方法142   第7章 数组144   7.1 创建数组 144   7.2 数组元素的读和写145   7.3 稀疏数组147   7.4 数组长度148   7.5 数组元素的添加和删除149   7.6 数组遍历149   7.7 多维数组151   7.8 数组方法152   7.9 ECMAScript 5中的数组方法 156   7.10 数组类型160   7.11 类数组对象161   7.12 作为数组的字符串163   第8章 函数165   8.1 函数定义166   8.2 函数调用168   8.3 函数的实参和形参173   8.4 作为值的函数178   8.5 作为命名空间的函数181   8.6 闭包182   8.7 函数属性、方法和构造函数188   8.8 函数式编程194   第9章 类和模块201   9.1 类和原型202   9.2 类和构造函数203   9.3 JavaScript中Java式的类继承207   9.4 类的扩充210   9.5 类和类型212   9.6 JavaScript中的面向对象技术217   9.7 子类230   9.8 ECMAScript 5 中的类239   9.9 模块248   第10章 正则表达式的模式匹配253   10.1 正则表达式的定义253   10.2 用于模式匹配的String方法261   10.3 RegExp对象263   第11章 JavaScript的子集和扩展267   11.1 JavaScript的子集268   11.2 常量和局部变量271   11.3 解构赋值274   11.4 迭代276   11.5 函数简写285   11.6 多catch 从句285   11.7 E4X: ECMAScript for XML286   第12章 服务器端JavaScript290   12.1 用Rhino脚本化Java291   12.2 用Node实现异步I/O297   第二部分 客户端JavaScript   第13章 Web浏览器中的JavaScript309   13.1 客户端JavaScript309   13.2 在HTML里嵌入JavaScript313   13.3 JavaScript程序的执319   13.4 兼容性和互用性326   13.5 可访问性333   13.6 安全性334   13.7 客户端框架339   第14章 Window对象341   14.1 计时器342   14.2 浏览器定位和导航343   14.3 浏览历史345   14.4 浏览器和屏幕信息346   14.5 对话框348   14.6 错误处理351   14.7 作为Window对象属性的文档元素351   14.8 多窗口和窗体353   第15章 脚本化文档361   15.1 DOM概览362   15.2 选取文档元素364   15.3 文档结构和遍历371   15.4 属性375   15.5 元素的内容378   15.6 创建、插入和删除节点382   15.7 例子:生成目录表387   15.8 文档和元素的几何形状和滚动389   15.9 HTML表单396   15.10 其他文档特性404   第16章 脚本化CSS410   16.1 CSS概览411   16.2 重要的CSS属性416   16.3 脚本化内联样式427   16.4 查询计算出的样式431   16.5 脚本化CSS类433   16.6 脚本化样式表436   第17章 事件处理440   17.1 事件类型442   17.2 注册事件处理程序451   17.3 事件处理程序的调用454   17.4 文档加载事件459   17.5 鼠标事件461   17.6 鼠标滚轮事件465   17.7 拖放事件468   17.8 文本事件475   17.9 键盘事件478   第18章 脚本化HTTP484   18.1 使用XMLHttpRequest487   18.2 借助
好的,我来回答你的问题。 1. 给出一个字符串,找出字符串中所有的单词。 可以通过正则表达式来实现,代码如下: ```javascript const str = "hello world, I'm a developer"; const words = str.match(/\b\w+\b/g); console.log(words); // ["hello", "world", "I'm", "a", "developer"] ``` 这里使用了 `\b\w+\b` 匹配单词的正则表达式,其中 `\b` 表示单词边界,`\w+` 表示匹配一个或多个字母数字下划线字符。 2. 从键盘输入两个字符串,在第一个字符串中删除第二个字符串的字符。 可以先将第二个字符串转换为字符数组,然后遍历该数组,在第一个字符串中删除对应的字符。代码如下: ```javascript const str1 = "hello world"; const str2 = "o"; const chars = str2.split(""); for (let i = 0; i < chars.length; i++) { const char = chars[i]; str1 = str1.replace(new RegExp(char, "g"), ""); } console.log(str1); // "hell wrld" ``` 这里使用了 `split` 将第二个字符串转换为字符数组,然后遍历该数组,使用 `replace` 在第一个字符串中删除对应的字符。 3. 使用正则表达式匹配日期格式,如 2022年11月30日。 可以使用如下正则表达式匹配日期格式: ```javascript const str = "2022年11月30日"; const dateRegex = /(\d{4})年(\d{1,2})月(\d{1,2})日/; const match = str.match(dateRegex); const year = match[1]; const month = match[2]; const day = match[3]; console.log(`${year}-${month}-${day}`); // "2022-11-30" ``` 这里使用了 `(\d{4})年(\d{1,2})月(\d{1,2})日` 匹配日期格式的正则表达式,其中 `(\d{4})` 表示匹配 4 个数字的年份,`(\d{1,2})` 表示匹配 1 到 2 个数字的月份和日期。然后使用 `match` 方法匹配字符串,获取到匹配的年份、月份和日期,并使用模板字符串拼接成标准日期格式输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Meta.Qing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值