js api part6

正则表达式

正则表达式 (Regular Expression)是用于 匹配字符串中字符组合 的模式。在 JavaScript中,正则表达式也是对象。通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式。

正则表达式在 JavaScript中的使用场景:
1. 例如 验证表单 :用户名表单只能输入英文字母、数字或者下划线, 昵称输入框中可以输入中文。 ( 匹配 ) ,比如用户名: /^[a-z0-9_-]{3,16}$/
2. 过滤掉页面内容中的一些 敏感词 ( 替换 )
3.从字符串中获取我们想要的特定部分( 提取 )等 。

语法

1. 定义正则表达式语法:

 const 变量名 = /表达式/

其中 / / 是正则表达式字面量,比如:const reg = /前端/
2.判断是否有符合规则的字符串:
test() 方法 用来查看正则表达式与指定的字符串是否匹配
语法: regObj.test(被检测的字符串)  
如果正则表达式与指定的字符串匹配 ,返回true,否则false

<script>const str = '我们在学习前端,希望学习前端能高薪毕业'// 正则表达式使用:// 1. 定义规则const reg = /前端/// 2. 是否匹配console.log(reg.test(str))  // true
</script>

3.检索(查找)符合规则的字符串:

exec() 方法 在一个指定字符串中执行一个搜索匹配

语法: regObj.exec(被检测的字符串)  

如果匹配成功,exec() 方法返回一个数组,否则返回null

元字符

知道即可?

元字符(特殊字符):是一些具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能。

比如,规定用户只能输入英文26个英文字母,普通字符的话 abcdefghijklm….但是换成元字符写法: [a-z]

1.边界符(表示位置,开头和结尾,必须用什么开头,用什么结尾)

正则表达式中的边界符(位置符)用来 提示字符所处的位置 ,主要有两个字符

边界符说明
^表示匹配行首文本 开始
$表示匹配行末文本 结束
console.log(/哈/.test('哈')) // true
console.log(/哈/.test('哈哈')) // true
console.log(/哈/.test('二哈')) // true
console.log('--------------')
//1.边界符
console.log(/^哈/.test('哈')) // true
console.log(/^哈/.test('哈哈')) // true
console.log(/^哈/.test('二哈')) // flase
console.log(/^哈$/.test('哈')) // true
console.log(/^哈$/.test('哈哈')) // flase!!!!!!!!!!!
console.log('-----------') 

2.量词 (表示重复次数)

量词用来 设定某个模式出现的次数

量词说明
*0或more
+1或more
0或1
<script>元字符量词 * 类似 >=0 次console.log(/^哈$/.test('哈')) // trueconsole.log(/^哈*$/.test('')) // trueconsole.log(/^哈*$/.test('哈')) // trueconsole.log(/^哈*$/.test('哈哈')) // trueconsole.log(/^哈*$/.test('二哈很傻')) //  falseconsole.log(/^哈*$/.test('哈很傻')) //  falseconsole.log(/^哈*$/.test('哈很哈')) // falseconsole.log('------------------')量词 + 类似 >=1 次console.log(/^哈$/.test('哈')) // trueconsole.log(/^哈+$/.test('')) // falseconsole.log(/^哈+$/.test('哈')) // trueconsole.log(/^哈+$/.test('哈哈')) // trueconsole.log(/^哈+$/.test('二哈很傻')) //  falseconsole.log(/^哈+$/.test('哈很傻')) //  falseconsole.log(/^哈+$/.test('哈很哈')) // falseconsole.log('------------------')// //  量词 ? 类似  0 || 1console.log(/^哈?$/.test('')) // trueconsole.log(/^哈?$/.test('哈')) // trueconsole.log(/^哈?$/.test('哈哈')) // falseconsole.log(/^哈?$/.test('二哈很傻')) //  falseconsole.log(/^哈?$/.test('哈很傻')) //  falseconsole.log(/^哈?$/.test('哈很哈')) // false// 量词 {n} 写几,就必须出现几次console.log(/^哈{4}$/.test('哈'))console.log(/^哈{4}$/.test('哈哈'))console.log(/^哈{4}$/.test('哈哈哈'))console.log(/^哈{4}$/.test('哈哈哈哈'))console.log(/^哈{4}$/.test('哈哈哈哈哈'))console.log(/^哈{4}$/.test('哈哈哈哈哈哈'))console.log('------------------')// 量词 {n,}   >=nconsole.log(/^哈{4,}$/.test('哈'))console.log(/^哈{4,}$/.test('哈哈'))console.log(/^哈{4,}$/.test('哈哈哈'))console.log(/^哈{4,}$/.test('哈哈哈哈'))console.log(/^哈{4,}$/.test('哈哈哈哈哈'))console.log(/^哈{4,}$/.test('哈哈哈哈哈哈'))console.log('------------------')// 量词 {n,m}  逗号左右两侧千万不能有空格    >=n && <= mconsole.log(/^哈{4,6}$/.test('哈'))console.log(/^哈{4,6}$/.test('哈哈'))console.log(/^哈{4,6}$/.test('哈哈哈'))console.log(/^哈{4,6}$/.test('哈哈哈哈'))console.log(/^哈{4,6}$/.test('哈哈哈哈哈'))console.log(/^哈{4,6}$/.test('哈哈哈哈哈哈'))console.log(/^哈{4,6}$/.test('哈哈哈哈哈哈哈'))console.log('------------------')</script>

3.字符类 (比如 \d 表示 0~9)

  1.  [ ] 匹配字符集合,后面的字符串只要包含[ ]中任意 一个字符 ,都返回 true
  2. a.[ ] 里面加上 - 连字符,使用 连字符 - 表示一个范围 。
    比如:
            [a-z] 表示 a 到 z 26个英文字母都可以
            [a-zA-Z] 表示大小写都可以
            [0-9] 表示 0~9 的数字都可以

  3. [ ] 里面加上 ^ 取反符号

    比如: [^a-z] 匹配除了小写字母以外的字符

  4.  匹配除换行符之外的任何单个字符

  <script>// 元字符// 字符类   [abc]  只选1个console.log(/^[abc]$/.test('a'))  // trueconsole.log(/^[abc]$/.test('b'))  // trueconsole.log(/^[abc]$/.test('c'))  // trueconsole.log(/^[abc]$/.test('ab'))  // falseconsole.log(/^[abc]{2}$/.test('ab'))  // trueconsole.log('------------------')// 字符类   [a-z]  只选1个console.log(/^[A-Z]$/.test('p'))  // falseconsole.log(/^[A-Z]$/.test('P'))  // trueconsole.log(/^[0-9]$/.test(2))  // trueconsole.log(/^[a-zA-Z0-9]$/.test(2))  // trueconsole.log(/^[a-zA-Z0-9]$/.test('p'))  // trueconsole.log(/^[a-zA-Z0-9]$/.test('P'))  // trueconsole.log('------------------')</script>
 验证表单案例
<body><input type="text"><span></span><script>// 1. 准备正则const reg = /^[a-zA-Z0-9-_]{6,16}$/const input = document.querySelector('input')const span = input.nextElementSiblinginput.addEventListener('blur', function () {// console.log(reg.test(this.value))if (reg.test(this.value)) {span.innerHTML = '输入正确'span.className = 'right'} else {span.innerHTML = '请输入6~16位的英文数字下划线'span.className = 'error'}})</script>
</body>

4. 预定义: 指的是 某些常见模式的简写方式。

 修饰符 

修饰符约束正则执行的某些细节行为,如是否区分大小写、是否支持多行匹配等
语法:/表达式/修饰符
i 是单词 ignore 的缩写, 正则匹配时字母不区分大小写
g 是单词 global 的缩写, 匹配所有满足正则表达式的结果

替换 replace

语法: 字符串.replace(/正则表达式/,'替换掉文本')

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta http-equiv="X-UA-Compatible" content="ie=edge" /><title>Document</title><link rel="stylesheet" href="css/index.css" />
</head>
</head>
<body><textarea name="" id="" cols="30" rows="10"></textarea><button>发布</button><div></div><script>const tx = document.querySelector('textarea')const btn = document.querySelector('button')const div = document.querySelector('div')btn.addEventListener('click', function () {// console.log(tx.value)div.innerHTML = tx.value.replace(/激情|基情|jj|78/g, '**')tx.value = ''})</script>
</body>
</html>

注册页面综合案例

<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>小兔鲜儿-新鲜、惠民、快捷!</title><meta name="description" content="小兔鲜儿官网,致力于打造全球最大的食品、生鲜电商购物平台。"><meta name="keywords" content="小兔鲜儿,食品,生鲜,服装,家电,电商,购物"><!-- 引入网站图标 --><link rel="shortcut icon" href="favicon.ico" type="image/x-icon"><!-- 引入初始化样式 --><link rel="stylesheet" href="./css/base.css"><!-- 引入公共样式 --><link rel="stylesheet" href="./css/common.css"><!-- 引入注册样式 --><link rel="stylesheet" href="./css/register.css"><!-- 引入字体图标 --><link rel="stylesheet" href="https://at.alicdn.com/t/font_2143783_iq6z4ey5vu.css">
</head>
<body><!-- 头部开始 --><!-- 快捷导航栏开始 --><div class="shortcut sk"><div class="w"><ul><li><a href="javascript:;">请先登录</a></li><li class="sep">|</li><li><a href="javascript:;">免费注册</a></li><li class="sep">|</li><li><a href="javascript:;">我的订单</a></li><li class="sep">|</li><li><a href="javascript:;">会员中心</a></li><li class="sep">|</li><li><a href="javascript:;">帮助中心</a></li><li class="sep">|</li><li><a href="javascript:;">在线客服</a></li><li class="sep">|</li><li><a href="javascript:;">手机版</a></li></ul></div></div><!-- 快捷导航栏结束 --><!-- 主导航栏开始 --><div class="main_nav w"><div class="logo"><h1><a href="index.html" title="小兔鲜儿">小兔鲜儿</a></h1></div><nav class="nav"><ul><li><a href="javascript:;">首页</a></li><li><a href="javascript:;">生鲜</a></li><li><a href="javascript:;">美食</a></li><li><a href="javascript:;">餐厨</a></li><li><a href="javascript:;">电器</a></li><li><a href="javascript:;">居家</a></li><li><a href="javascript:;">洗护</a></li><li><a href="javascript:;">孕婴</a></li><li><a href="javascript:;">服装</a></li></ul></nav><div class="search"><input type="search" placeholder="搜一搜"></div><a href="javascript:;"><div class="car"><span>2</span></div></a></div><!-- 主导航栏结束 --><!-- 头部结束 --><!-- 注册主体模块开始 --><div class="xtx-wrapper"><div class="container"><!-- 卡片 --><div class="xtx-card"><h3>新用户注册</h3><form class="xtx-form"><div data-prop="username" class="xtx-form-item"><span class="iconfont icon-zhanghao"></span><input name="username" type="text" placeholder="设置用户名称"><span class="msg"></span></div><div data-prop="phone" class="xtx-form-item"><span class="iconfont icon-shouji"></span><input name="phone" type="text" placeholder="输入手机号码  "><span class="msg"></span></div><div data-prop="code" class="xtx-form-item"><span class="iconfont icon-zhibiaozhushibiaozhu"></span><input name="code" type="text" placeholder="短信验证码"><span class="msg"></span><a class="code" href="javascript:;">发送验证码</a></div><div data-prop="password" class="xtx-form-item"><span class="iconfont icon-suo"></span><input name="password" type="password" placeholder="设置6至20位字母、数字和符号组合"><span class="msg"></span></div><div data-prop="confirm" class="xtx-form-item"><span class="iconfont icon-suo"></span><input name="confirm" type="password" placeholder="请再次输入上面密码"><span class="msg"></span></div><div class="xtx-form-item pl50"><i class="iconfont icon-queren"></i>已阅读并同意<i>《用户服务协议》</i></div><div class="xtx-form-item"><button class="submit">下一步</button><!-- <a class="submit" href="javascript:;">下一步</a> --></div></form></div></div></div><!-- 注册主体模块结束--><footer><div class="ft w"><dl class="kefu"><dt>客服服务</dt><dd class="zaixian"><p><a href="javascript:;">在线客服</a></p></dd><dd class="wenti"><p><a href="javascript:;">问题反馈</a></p></dd></dl><dl class="guanzhu"><dt>关注我们</dt><dd class="gongzhong"><p><a href="javascript:;">公众号</a></p></dd><dd class="weibo"><p><a href="javascript:;">微博</a></p></dd></dl><dl class="xiazai"><dt>下载APP</dt><dd><img src="./uploads/qrcode.png" alt=""></dd><dd><p><a href="javascript:;">扫描二维码</a></p><p><a href="javascript:;">立马下载APP</a></p><button>下载页面</button></dd></dl><dl class="rexian"><dt>服务热线</dt><dd><p>400-0000-000</p></dd><dd><p>周一至周日 8:00-18:00</p></dd></dl></div><div class="fb"><div class="fb_t"><ul><li>价格亲民</li><li>物流快捷</li><li>品质新鲜</li></ul></div><div class="fb_b"><p><a href="javascript:;">关于我们</a><i>|</i><a href="javascript:;">帮助中心</a><i>|</i><a href="javascript:;">售后服务</a><i>|</i><a href="javascript:;">配送与验收</a><i>|</i><a href="javascript:;">商务合作</a><i>|</i><a href="javascript:;">搜索推荐</a><i>|</i><a href="javascript:;">友情链接</a></p><p><a href="javascript:;">CopyRight @ 小兔鲜儿</a></p></div></div></div></footer></body>
</html>

用这个 removeEventListener 暂时移除点击事件,a标签有pointerEvents = 'none'也是可以。  试过了用高阶函数可以传参的

以上存疑 

change事件 

<script>(function () {// 1.发送短信验证码模块const code = document.querySelector('.code')let flag = true // 通过一个变量来控制   节流阀// 1.1 点击事件code.addEventListener('click', function () {if (flag) {// flag取反,不能第二次点击flag = falselet i = 5code.innerHTML = `${i}秒后重新获取`let timerId = setInterval(function () {i--// 这里不能用 this,定时器的调用者指向 windowcode.innerHTML = `${i}秒后重新获取`if (i === 0) {// 清除定时器clearInterval(timerId)// 重新获取code.innerHTML = `重新获取`// 到时间了,可以开启flag 即可以点击了flag = true}}, 1000)}})})();// 2. 验证的是用户名// 2.1 获取用户名表单const username = document.querySelector('[name=username]')// 2.2 使用change事件  值发生变化的时候username.addEventListener('change', verifyName)// 2.3 封装 verifyName 函数function verifyName() {const span = username.nextElementSibling// 2.4 定义规则  用户名const reg = /^[a-zA-Z0-9-_]{6,10}$/if (!reg.test(username.value)) {span.innerText = '输入不合法,请输入6~10位'return false}// 2.5 合法的 清空spanspan.innerText = ''return true}// 3. 验证的是手机号// 3.1 获取手机表单const phone = document.querySelector('[name=phone]')// 3.2 使用change事件  值发生变化的时候phone.addEventListener('change', verifyPhone)// 3.3 封装 verifyPhone 函数function verifyPhone() {const span = phone.nextElementSibling// 3.4 定义规则  手机号const reg = /^1(3\d|4[5-9]|5[0-35-9]|6[567]|7[0-8]|8\d|9[0-35-9])\d{8}$/if (!reg.test(phone.value)) {span.innerText = '输入不合法,请输入正确的11位手机号'return false}// 3.5 合法的 清空spanspan.innerText = ''return true}// 4. 验证的是验证码// 4.1 获取验证码表单const codeInput = document.querySelector('[name=code]')// 4.2 使用change事件  值发生变化的时候codeInput.addEventListener('change', verifyCode)// 4.3 封装 verifyCode 函数function verifyCode() {const span = codeInput.nextElementSibling// 4.4 定义规则  手机号const reg = /^\d{6}$/if (!reg.test(codeInput.value)) {span.innerText = '输入不合法,请输入6位数字'return false}// 4.5 合法的 清空spanspan.innerText = ''return true}// 5. 验证的是密码框// 5.1 获取密码框表单const password = document.querySelector('[name=password]')// 5.2 使用change事件  值发生变化的时候password.addEventListener('change', verifyPwd)// 5.3 封装 verifyPwd 函数function verifyPwd() {const span = password.nextElementSibling// 5.4 定义规则  手机号const reg = /^[a-zA-Z0-9-_]{6,20}$/if (!reg.test(password.value)) {span.innerText = '输入不合法,请输入6~20位数字'return false}// 5.5 合法的 清空spanspan.innerText = ''return true}// 6. 密码的再次验证// 6.1 获取再次验证表单const confirm = document.querySelector('[name=confirm]')// 6.2 使用change事件  值发生变化的时候confirm.addEventListener('change', verifyConfirm)// 6.3 封装 verifyConfirm 函数function verifyConfirm() {const span = confirm.nextElementSibling// 6.4 当前表单的值不等于密码框的值 就是错误的if (confirm.value !== password.value) {span.innerText = '两次密码输入不一致'return false}// 6.5 合法的 清空spanspan.innerText = ''return true}//这里用change有个bug,就是重复输入正确后,如果再去改了上面的密码,//再来点击下验证密码框是没有提示的。// 7. 同意模块const queren = document.querySelector('.icon-queren')queren.addEventListener('click', function () {// 切换类 toggle 原来有的就删除,没有的就添加this.classList.toggle('icon-queren2')})// 8.表单提交模块const form = document.querySelector('form')form.addEventListener('submit', function (e) {// 判断是否勾选同意模块 ,如果有 icon-queren2说明就勾选了,否则没勾选if (!queren.classList.contains('icon-queren2')) {alert('请勾选同意协议')// return 中止程序,但不阻止提交  所以要阻止提交e.preventDefault()}// 依次判断上面的每个框框是否通过,只有有一个没有通过就阻止// 因为每一个都要判断 所以要分开写 如果用 || 只会显示第一个不通过的错误信息if (!verifyName()) e.preventDefault()if (!verifyPhone()) e.preventDefault()if (!verifyCode()) e.preventDefault()if (!verifyPwd()) e.preventDefault()if (!verifyConfirm()) e.preventDefault()})</script>

classList.contains()看看有没有某个类

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

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

相关文章

spring框架学习记录(3)

Spring事务 Spring事务简介 事务作用&#xff1a;在数据层保障一系列的数据库操作同成功同失败Spring事务作用&#xff1a;在数据层或业务层保障一系列的数据库操作同成功或同失败 Spring事务角色 事务管理员&#xff1a;发起事务方&#xff0c;在Spring中通常指代业务层开…

AI智能分析视频监控行业的发展趋势和市场发展浅析

监控视频AI智能分析技术的现状呈现出蓬勃发展的态势&#xff0c;这一技术源于计算机视觉和人工智能的研究&#xff0c;旨在将图像与事件描述之间建立映射关系&#xff0c;使计算机能够从视频图像中分辨出目标信息。 在技术上&#xff0c;监控视频AI智能分析技术已经实现了对视…

Ps中 饱和度 和 自然饱和度 的区别?

1.饱和度&#xff08;Saturation&#xff09;&#xff1a;在Photoshop中&#xff0c;饱和度是一个全局性调整&#xff0c;它影响图像中所有颜色的鲜艳程度。当你增加饱和度时&#xff0c;所有的颜色都会变得更浓烈、更鲜艳&#xff1b;相反&#xff0c;减小饱和度会使图像整体变…

小猪APP分发:重塑应用分发市场的创新力量

在移动互联网蓬勃发展的今天&#xff0c;应用分发平台作为连接开发者与用户的桥梁&#xff0c;扮演着至关重要的角色。然而&#xff0c;随着市场的饱和&#xff0c;如何在众多平台中脱颖而出&#xff0c;为开发者提供更宽广的舞台&#xff0c;同时确保用户能够便捷、安全地获取…

程序员必备的7大神器,效率飞起!

我们都知道程序员在工作时&#xff0c;会经常遇到任务繁重的情况&#xff0c;为了提高效率&#xff0c;程序员们也会借助一些软件&#xff0c;那么哪些软件可以帮助程序员们提高工作效率呢&#xff1f; 整理不易&#xff0c;关注一波&#xff01;&#xff01; 1. Xftp 7 Xft…

06-beanFactoryPostProcessor的执行

文章目录 invokeBeanFactoryPostProcessors(beanFactory)invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors())invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry);invokeBeanFactoryPostProcessors(regularPostProc…

将ESP工作为AP路由模式并当成服务器

将ESP8266模块通过usb转串口接入电脑 ATCWMODE3 //1.配置成双模ATCIPMUX1 //2.使能多链接ATCIPSERVER1 //3.建立TCPServerATCIPSEND0,4 //4.发送4个字节在链接0通道上 >ATCIPCLOSE0 //5.断开连接通过wifi找到安信可的wifi信号并连接 连接后查看自己的ip地址变为192.168.4.…

Java中next()与nextLine()的区别[不废话,直接讲例子]

在使用牛客进行刷题时&#xff0c;我们很多时候会遇到这样的情况&#xff1a; 区别很简单&#xff0c;如果你要输入用空格或者回车分开的数据如&#xff1a; abc_def_ghi 这三组数据&#xff08; _ 是空格&#xff09; 用hasNext: 执行结果&#xff1a; 如果只用换行符号进行…

6层板学习笔记1

说明:笔记基于6层全志H3消费电子0.65MM间距BGA 目的:掌握各类接口的布局思路和布线,掌握DDR高速存储设计 1、网表的导入是原理图的元件电气连接关系,位号,封装,名称等参数信息的总和 2、原理图文件包含(历史版本记录,功能总框图,电源树,GPIO分配,DDR功能,CPU,US…

Mysql:Before start of result set

解决方法&#xff1a;使用resultSet.getString&#xff08;&#xff09;之前一定要调用resultSet.next() ResultSet resultSet statement1.executeQuery();while (resultSet.next()){String username1 resultSet.getString("username");int id1 resultSet.getInt…

pytorch基础: torch.unbind()

1. torch.unbind 作用 说明&#xff1a;移除指定维后&#xff0c;返回一个元组&#xff0c;包含了沿着指定维切片后的各个切片。 参数&#xff1a; tensor(Tensor) – 输入张量dim(int) – 删除的维度 2. 案例 案例1 x torch.rand(1,80,3,360,360)y x.unbind(dim2)print(&…

案例分享:BACnet转Modbus提升暖通系统互操作性

现代智能建筑中系统的集成与互操作性是决定其智能化程度的关键因素。随着技术的发展&#xff0c;不同标准下的设备共存成为常态&#xff0c;而BACnet与Modbus作为楼宇自动化领域广泛采用的通讯协议&#xff0c;它们之间的无缝对接显得尤为重要。本文将通过一个实际案例&#xf…

全面的Partisia Blockchain 生态 4 月市场进展解读

Partisia Blockchain 是一个以高迸发、隐私、高度可互操作性、可拓展为特性的 Layer1 网络。通过将 MPC 技术方案引入到区块链系统中&#xff0c;以零知识证明&#xff08;ZK&#xff09;技术和多方计算&#xff08;MPC&#xff09;为基础&#xff0c;共同保障在不影响网络完整…

如何在matlab时间序列中X轴标注月-日

一般我们使用的时间序列都是以年为单位&#xff0c;比如下图&#xff1a; 而如果要绘制月尺度的时间变化图&#xff0c;则需要调整X轴的标注。下面代码展示了如何绘制小时尺度的降水数据。 [sname2,lon2,lat2] kml2xy(GZ_.kml); nc_bound2 [lon2,lat2]; area_ind2inpolygon(e…

WSL介绍(Windows10内置的Linux子系统)

最近发现在Windows10下不用安装虚拟机也可以使用Linux&#xff0c;然后发现原来2016年就已经有这个功能了&#xff0c;下面来介绍下如何使用。 首先我的win10版本信息如下&#xff0c;以免部分版本不支持&#xff0c;可以做个参考。 需要进到控制面板里将Linux子系统功能打开&a…

Linux学习笔记1

1.背景认知 可能很多人还没有接触Linux&#xff0c;会有点畏惧&#xff0c;我们可以把Linux类比成Windows&#xff0c; 下面是Windows和Linux的启动对比 Windows&#xff1a;上电后一开始屏幕是黑黑的---bios在启动Windows----Windows之后找到c盘启动各种应用程序 Linux&am…

Web前端三大主流框架是什么?

Web前端开发领域的三大主流框架分别是Angular、React和Vue.js。它们在Web开发领域中占据着重要的地位&#xff0c;各自拥有独特的特点和优势。 Angular Angular是一个由Google开发的前端框架&#xff0c;最初版本称为AngularJS&#xff0c;后来升级为Angular。它是一个完整的…

Apple强大功能:在新款 iPad Pro 和 iPad Air 中释放 M4 芯片潜力

Apple 的最新强大功能&#xff1a;在新款 iPad Pro 和 iPad Air 中释放 M4 芯片的潜力 概述 Apple 推出配备强大 M4 芯片的最新 iPad Pro 和 iPad Air 型号&#xff0c;再次突破创新界限。新一代 iPad 有望彻底改变我们的工作、创造和娱乐方式。凭借无与伦比的处理能力、令人惊…

模糊的图片文字,OCR能否正确识别?

拍照手抖、光线不足等复杂的环境下形成的图片都有可能会造成文字模糊&#xff0c;那这些图片文字对于OCR软件来说&#xff0c;是否能否准确识别呢&#xff1f; 这其中的奥秘&#xff0c;与文字的模糊程度紧密相连。想象一下&#xff0c;如果那些文字对于我们的双眼来说&#x…

智能家居4 -- 添加接收消息的初步处理

这一模块的思路和前面的语言控制模块很相似&#xff0c;差别只是调用TCP 去控制 废话少说&#xff0c;放码过来 增添/修改代码 receive_interface.c #include <pthread.h> #include <mqueue.h> #include <string.h> #include <errno.h> #include <…