我需要一种方法来检查字符串是否包含日语或中文文本。
目前我正在使用这个:
string.match(/[\u3400-\u9FBF]/);
但它不适用于此,例如:
ディアボリックラヴァーズ
或バッテリー
。
你能帮我吗?
谢谢
中文和日文文本常用的 Unicode 字符范围是:
作为正则表达式,可以表示为:
/[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f]/
这不包括中文和日文文本中出现的每个字符,但任何重要的典型中文或日文文本都将主要由这些范围内的字符组成。
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()
您可以使用此代码,它对我有用。
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");
}
如果您需要区分 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" };
}
}