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

时间:2017-04-14 20:31:55

标签: javascript regex

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

目前我正在使用它:

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

但它无效,例如:ディアボリックラヴァーズバッテリー

你可以帮帮我吗?

由于

3 个答案:

答案 0 :(得分:9)

常用于中文和日文文本的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的韩语文本。这是Han unification不可避免的结果。

答案 1 :(得分:1)

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

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");
}

答案 2 :(得分:0)

迅速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()