检查字符串是否包含日文/中文字符

问题描述 投票:0回答:4

我需要一种方法来检查字符串是否包含日语中文文本。

目前我正在使用这个:

string.match(/[\u3400-\u9FBF]/);

但它不适用于此,例如:

ディアボリックラヴァーズ
バッテリー

你能帮我吗?

谢谢

javascript regex kana
4个回答
32
投票

中文和日文文本常用的 Unicode 字符范围是:

  • U+3040 - U+30FF:平假名和片假名(仅限日语)
  • U+3400 - U+4DBF:CJK 统一表意文字扩展 A(中、日、韩)
  • U+4E00 - U+9FFF:CJK 统一表意文字(中、日、韩)
  • U+F900 - U+FAFF:CJK 兼容表意文字(中文、日语和韩语)
  • U+FF66 - U+FF9F:半角片假名(仅限日语)

作为正则表达式,可以表示为:

/[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f]/

这不包括中文和日文文本中出现的每个字符,但任何重要的典型中文或日文文本都将主要由这些范围内的字符组成。

请注意,此正则表达式也将匹配包含 hanja 的韩语文本。这是汉统一不可避免的结果。


4
投票

swift 4,将模式更改为 NSRegularExpression 进行替换,也许可能会对某人有所帮助!

[\u{3040}-\u{30ff}\u{3400}-\u{4dbf}\u{4e00}-\u{9fff}\u{f900}-\u{faff}\u{ff66}-\u{ff9f}]

扩展方法

mutating func removeRegexMatches(pattern: String, replaceWith: String = "") {
        do {
            let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpression.Options.caseInsensitive)
            let range = NSMakeRange(0, self.count)
            self = regex.stringByReplacingMatches(in: self, options: [], range: range, withTemplate: replaceWith)
        } catch {
            return
        }
    }

    mutating func removeEastAsianChars() {
        let regexPatternEastAsianCharacters = "[\u{3040}-\u{30ff}\u{3400}-\u{4dbf}\u{4e00}-\u{9fff}\u{f900}-\u{faff}\u{ff66}-\u{ff9f}]"
        removeRegexMatches(pattern: regexPatternEastAsianCharacters)
    }

示例,字符串结果为 ABC

"ABC検診センター".removeEastAsianChars()

4
投票

您可以使用此代码,它对我有用。

let str = "渣打銀行提供一系列迎合你生活需要嘅信用卡";
//let str = "SGGRAND DING HOUSE 4GRAND DING HOUSE";
const REGEX_CHINESE = /[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f]/;
const hasChinese = str.match(REGEX_CHINESE);
if(hasChinese){
  alert("Found");
}
else{
  alert("Not Found");
}

0
投票

如果您需要区分 CKJ 语言,这可能会有所帮助:

function detectCJKLanguage(str) {
  // Chinese characters range
  const chineseRegex = /[\u4E00-\u9FFF]/;
  // Japanese characters range
  const japaneseRegex = /[\u3040-\u30FF\u31F0-\u31FF\uFF00-\uFFEF]/;
  // Korean characters range
  const koreanRegex = /[\u1100-\u11FF\u3130-\u318F\uAC00-\uD7AF]/;

  // Check if the string contains any CJK characters
  if (chineseRegex.test(str)) {
    return { isCJK: true, language: "Chinese" };
  } else if (japaneseRegex.test(str)) {
    return { isCJK: true, language: "Japanese" };
  } else if (koreanRegex.test(str)) {
    return { isCJK: true, language: "Korean" };
  } else {
    return { isCJK: false, language: "Non-CJK" };
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.