如何用正则表达式玩转“中文”“数字”“字母”
第一次尝试写文章
关于一些如何用正则对中文数字字母的使用
如果你想要 提取 一个字符串中的 中文、数字和字母,并过滤掉其他字符(如标点符号、空格、特殊符号等),可以使用 正则表达式 结合 replace() 或 match() 方法来实现。
方法 1:使用 replace() 过滤非中文字符、字母、数字
function filterChineseLetterNumber(str) {
// 使用正则替换所有非中文、字母、数字的字符
return str.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, '');
}
console.log(filterChineseLetterNumber("你好abc123!@#")); // "你好abc123"
console.log(filterChineseLetterNumber("Hello 世界!123")); // "Hello世界123"
[^...] 表示 匹配不包含这些字符(^ 是取反)。
\u4e00-\u9fa5 匹配 中文。
a-zA-Z 匹配 字母。
0-9 匹配 数字。
g 表示全局匹配(替换所有匹配项)。
方法 2:使用 match() 提取中文字符、字母、数字
function extractChineseLetterNumber(str) {
// 匹配所有中文、字母、数字
const matches = str.match(/[\u4e00-\u9fa5a-zA-Z0-9]/g);
return matches ? matches.join('') : '';
}
console.log(extractChineseLetterNumber("你好abc123!@#")); // "你好abc123"
console.log(extractChineseLetterNumber("Hello 世界!123")); // "Hello世界123"
match() 返回匹配的数组,如果没有匹配则返回 null,所以要用 ?? 或 || 处理空情况。
join('') 将数组转成字符串。
方法 3:使用 split() + filter() 过滤
function filterChineseLetterNumber(str) {
return str
.split('')
.filter(char => /[\u4e00-\u9fa5a-zA-Z0-9]/.test(char))
.join('');
}
console.log(filterChineseLetterNumber("你好abc123!@#")); // "你好abc123"
split('') 将字符串拆分成字符数组。
filter() 保留符合正则的字符。
join('') 重新组合成字符串。
总结
方法代码说明replace()str.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, '')替换所有非中文、字母、数字的字符match()str.match(/[\u4e00-\u9fa5a-zA-Z0-9]/g)?.join('')提取所有中文、字母、数字并拼接split() + filter()str.split('').filter(c => /[\u4e00-\u9fa5a-zA-Z0-9]/.test(c)).join('')逐个字符过滤并重组
示例
const str = "Hello 世界!123 @#$";
console.log(filterChineseLetterNumber(str)); // "Hello世界123"
console.log(extractChineseLetterNumber(str)); // "Hello世界123"
你可以根据需求选择最适合的方法!🚀
在 JavaScript 中,你可以使用 正则表达式(RegExp) 来判断一个字符串是否包含 中文、字母、数字。以下是几种常见的判断方式:
1. 判断字符串是否包含至少一个中文字符
function hasChinese(str) {
return /[\u4e00-\u9fa5]/.test(str);
}
console.log(hasChinese("你好")); // true
console.log(hasChinese("hello")); // false
\u4e00-\u9fa5 是 Unicode 范围,涵盖大部分中文字符。
2. 判断字符串是否包含至少一个字母(A-Z, a-z)
function hasLetter(str) {
return /[a-zA-Z]/.test(str);
}
console.log(hasLetter("abc")); // true
console.log(hasLetter("123")); // false
3. 判断字符串是否包含至少一个数字(0-9)
function hasNumber(str) {
return /\d/.test(str);
}
console.log(hasNumber("123")); // true
console.log(hasNumber("abc")); // false
4. 判断字符串是否同时包含中文、字母、数字
function hasChineseLetterNumber(str) {
const hasChinese = /[\u4e00-\u9fa5]/.test(str);
const hasLetter = /[a-zA-Z]/.test(str);
const hasNumber = /\d/.test(str);
return hasChinese && hasLetter && hasNumber;
}
console.log(hasChineseLetterNumber("你好abc123")); // true
console.log(hasChineseLetterNumber("你好123")); // false (缺少字母)
console.log(hasChineseLetterNumber("abc123")); // false (缺少中文)
5. 判断字符串是否包含中文、字母或数字(任意一种)
function hasChineseOrLetterOrNumber(str) {
return /[\u4e00-\u9fa5a-zA-Z0-9]/.test(str);
}
console.log(hasChineseOrLetterOrNumber("你好")); // true
console.log(hasChineseOrLetterOrNumber("abc")); // true
console.log(hasChineseOrLetterOrNumber("123")); // true
console.log(hasChineseOrLetterOrNumber("!@#")); // false
6. 判断字符串是否仅由中文、字母、数字组成
function isOnlyChineseLetterNumber(str) {
return /^[\u4e00-\u9fa5a-zA-Z0-9]+$/.test(str);
}
console.log(isOnlyChineseLetterNumber("你好abc123")); // true
console.log(isOnlyChineseLetterNumber("你好abc123!")); // false (包含特殊字符)
总结
需求正则表达式示例是否包含中文/[\u4e00-\u9fa5]/"你好" → true是否包含字母/[a-zA-Z]/"abc" → true是否包含数字/\d/"123" → true是否同时包含中文、字母、数字/[\u4e00-\u9fa5]/ && /[a-zA-Z]/ && /\d/"你好abc123" → true是否仅由中文、字母、数字组成/^[\u4e00-\u9fa5a-zA-Z0-9]+$/"你好abc123" → true
你可以根据具体需求选择合适的正则表达式进行判断。