如何用正则表达式玩转“中文”“数字”“字母”

233 阅读2分钟

第一次尝试写文章

关于一些如何用正则对中文数字字母的使用

如果你想要 提取 一个字符串中的 中文、数字和字母,并过滤掉其他字符(如标点符号、空格、特殊符号等),可以使用 正则表达式 结合 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

你可以根据具体需求选择合适的正则表达式进行判断。