js中字符串string,遍历json/Object【匹配url、邮箱、电话,版本号,千位分割,判断回文】

本文主要是介绍js中字符串string,遍历json/Object【匹配url、邮箱、电话,版本号,千位分割,判断回文】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

正则

合法的URL

邮箱、电话

字符串方法

千位分割:num.slice(render, len).match(/\d{3}/g).join(',')

版本号比较

判断回文

json/Object

遍历

自身属性

for...in+hasOwnProperty(key)

Object.获取数组(obj):Object.keys,Object.values ,Object.entries

+原型链

for...in

嵌套深:递归->栈

正则

合法的URL

URL结构一般包括协议、主机名、主机端口、路径、请求信息、哈希

  1. 域名不区分大小写:"www"子域名(可选)、二级域名、"com"顶级域名
  2. 只能包含字母(a-z、A-Z)、数字(0-9)和连字符(-)(但-不能再首尾)
https://www.bilibili.com/video/BV1F54y1N74E/?spm_id_from=333.337.search-card.all.click&vd_source=6fd32175adc98c97cd87300d3aed81ea
//开始:                     ^
//协议:                     http(s)?:\/\/
//域名:                     [a-zA-Z0-9]+-[a-zA-Z0-9]+|[a-zA-Z0-9]+
//顶级域名 如com cn,2-6位:   [a-zA-Z]{2,6}
//端口 数字:                (:\d+)?
//路径 任意字符 如 /login:   (\/.+)?
//哈希 ? 和 # ,如?age=1:    (\?.+)?(#.+)?
//结束:                      $
//     https://           www.bilibili                com    /video/BV1F54y1N74E  ?spm..            
/^(http(s)?:\/\/)?(([a-zA-Z0-9]+-[a-zA-Z0-9]+|[a-zA-Z0-9]+)\.)+([a-zA-Z]{2,6})(:\d+)?(\/.+)?(\?.+)?(#.+)?$/.test(url)

邮箱、电话

// 电话号码格式:(XXX) XXX-XXXX 或 XXX-XXX-XXXX 或 XXXXXXXXXX
function isValidPhoneNumber(phoneNumber) {const phoneRegex = /^(\(\d{3}\)\s?|\d{3}[-.\s]?)?\d{3}[-.\s]?\d{4}$/;return phoneRegex.test(phoneNumber);
}// 示例
console.log(isValidPhoneNumber("(123) 456-7890"));  // true
console.log(isValidPhoneNumber("123-456-7890"));    // true
console.log(isValidPhoneNumber("1234567890"));       // true
console.log(isValidPhoneNumber("12345"));            // falsefunction isValidEmail(email) {const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;return emailRegex.test(email);
}// 示例
console.log(isValidEmail("user@example.com"));        // true
console.log(isValidEmail("user@.com"));               // false
console.log(isValidEmail("invalid.email@domain"));    // false

字符串方法

千位分割:num.slice(render, len).match(/\d{3}/g).join(',')

  const format = (n) => {let num = n.toString() // 拿到传进来的 number 数字 进行 toStringlet len = num.length // 在拿到字符串的长度// 当传进来的结果小于 3 也就是 千位还把结果返回出去 小于3 不足以分割if (len < 3) {return num} else {let render = len % 3 //传入 number 的长度 是否能被 3 整除if (render > 0) { // 说明不是3的整数倍return num.slice(0, render) + ',' + num.slice(render, len).match(/\d{3}/g).join(',')} else {return num.slice(0, len).match(/\d{3}/g).join(',')}}}let str = format(298000)console.log(str)

版本号比较

/*** 解法一:分割截取* 思路:*(1)先根据.号分割成字符串数组,获取两个数组中的最大长度值,*(2)按顺序遍历比较,详细过程看以下代码* 时间复杂度:O(max(n, m))* 空间复杂度:O(max(n, m))*/
export function compare(version1, version2){const arr1 = version1.split('.')const arr2= version2.split('.')const maxLen = Math.max(arr1.length, arr2.length)for (let i = 0; i < maxLen; i++) {// arr1[i] - '0' ,js 会强制转换成 number 然后相减// 例如:('01' - '0'), 结果是 1 (number 类型)// @ts-ignoreconst num1 = arr1[i] ? parseInt(arr1[i]): 0 // @ts-ignoreconst num2 = arr2[i] ? parseInt(arr2[i]): 0if (num1 > num2) return 1if (num1 < num2) return -1}return 0
} 

判断回文

function isPalindrome(str) {return str === str.split('').reverse().join('');
}

json/Object

遍历

自身属性

for...in+hasOwnProperty(key)

for (let key in myObject) {if (myObject.hasOwnProperty(key)) {console.log(key, myObject[key]);}
}

Object.获取数组(obj):Object.keys,Object.values ,Object.entries

const myObject = { a: 1, b: 2, c: 3 };Object.keys(myObject).forEach(key => {console.log(key, myObject[key]);
});Object.values(myObject).forEach(value => {console.log(value);
});Object.entries(myObject).forEach(([key, value]) => {console.log(key, value);
});

+原型链

for...in

嵌套深:递归->栈

//递归
function recursion() {let res;res+=recursion(...);return res;
}
//栈
function iterative() {let res;const stack = [root]; while (stack.length > 0) {const current = stack.pop(); res+=...stack.push();}return res;
}

递归方法可能会导致 "栈溢出" 错误,js有一个限制,防止函数调用自身太多次。

// 示例使用
const a = {num: NaN,children: [{ num: 10, children: [] },{ num: 'not a number', children: [{ num: '3', children: [] }]}]
};//递归
function sumNumbers(obj) {let sum = 0;const num=Number(current.num)if (typeof num=== 'number'&& !isNaN(num)) {sum += num}if (Array.isArray(obj.children)) {for (const child of obj.children) {sum += sumNumbers(child);}}return sum;
}
//栈
function sumNumbersIterative(root) {let sum = 0;const stack = [root]; while (stack.length > 0) {const current = stack.pop(); const num=Number(current.num)if (typeof num=== 'number'&& !isNaN(num)) {sum += num}if (Array.isArray(current.children)) {for (const child of current.children) {stack.push(child);}}}return sum;
}console.log(sumNumbersIterative(a)); // 应输出13

这篇关于js中字符串string,遍历json/Object【匹配url、邮箱、电话,版本号,千位分割,判断回文】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/651204

相关文章

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

Python中json文件和jsonl文件的区别小结

《Python中json文件和jsonl文件的区别小结》本文主要介绍了JSON和JSONL两种文件格式的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 众所周知,jsON 文件是使用php JSON(JavaScripythonpt Object No

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一