如何检测字符串中是否包含印地文(devnagri)以及字符和字数
How to detect if a string contains hindi (devnagri) in it with character and word count
下面是一个示例字符串 -
$string = "abcde वायरस abcde"
我需要检查这个字符串是否包含任何印地语(天城文)内容,如果是的话,还需要检查字符数和单词数。我想带有 unicode 字符 class 的正则表达式可以工作 http://www.regular-expressions.info/unicode.html。但我无法找出正确的正则表达式语句。
要查明字符串是否包含印地语(梵文)字符,您需要拥有所有印地语字符的完整列表。根据this website,印地语字符是0x0900
和0x097F
之间的十六进制字符(十进制2304到2431)。
正则表达式模式需要匹配,如果这些字符中的任何一个在集合中。因此,你可以使用一个模式(实际上是一组字符)来匹配字符串,它看起来像这样:
[\u0900\u0901\u0902
... \u097D\u097E\u097F]
由于手动写下这个字符列表比较麻烦,您可以通过迭代从 2304 到 2431 的十进制字符或十六进制字符来生成此字符串。
要计算包含至少一个印地语字符的所有单词,您可以使用以下模式。它包含单词周围的白色-space(\s
)或单词周围的开头(^
)或结尾($
),以及一个全局标志,以匹配每次出现 (/g
):
/(?:^|\s)[\u0900\u0901\u0902
... \u097D\u097E\u097F]+?(?:\s|$)/g
这是 JavaScript 中的实时实现:
var numberOfHindiCharacters = 128;
var unicodeShift = 0x0900;
var hindiAlphabet = [];
for(var i = 0; i < numberOfHindiCharacters; i++) {
hindiAlphabet.push("\u0" + (unicodeShift + i).toString(16));
}
var regex = new RegExp("(?:^|\s)["+hindiAlphabet.join("")+"]+?(?:\s|$)", "g");
var string1 = "abcde वायरस abcde";
var string2 = "abcde abcde";
[ string1.match(regex), string2.match(regex) ].forEach(function(match) {
if(match) {
console.log("String contains " + match.length + " words with Hindi characters only.");
} else {
console.log("String does NOT contain any words with Hindi characters only.");
}
});
下面是一个示例字符串 -
$string = "abcde वायरस abcde"
我需要检查这个字符串是否包含任何印地语(天城文)内容,如果是的话,还需要检查字符数和单词数。我想带有 unicode 字符 class 的正则表达式可以工作 http://www.regular-expressions.info/unicode.html。但我无法找出正确的正则表达式语句。
要查明字符串是否包含印地语(梵文)字符,您需要拥有所有印地语字符的完整列表。根据this website,印地语字符是0x0900
和0x097F
之间的十六进制字符(十进制2304到2431)。
正则表达式模式需要匹配,如果这些字符中的任何一个在集合中。因此,你可以使用一个模式(实际上是一组字符)来匹配字符串,它看起来像这样:
[\u0900\u0901\u0902
... \u097D\u097E\u097F]
由于手动写下这个字符列表比较麻烦,您可以通过迭代从 2304 到 2431 的十进制字符或十六进制字符来生成此字符串。
要计算包含至少一个印地语字符的所有单词,您可以使用以下模式。它包含单词周围的白色-space(\s
)或单词周围的开头(^
)或结尾($
),以及一个全局标志,以匹配每次出现 (/g
):
/(?:^|\s)[\u0900\u0901\u0902
... \u097D\u097E\u097F]+?(?:\s|$)/g
这是 JavaScript 中的实时实现:
var numberOfHindiCharacters = 128;
var unicodeShift = 0x0900;
var hindiAlphabet = [];
for(var i = 0; i < numberOfHindiCharacters; i++) {
hindiAlphabet.push("\u0" + (unicodeShift + i).toString(16));
}
var regex = new RegExp("(?:^|\s)["+hindiAlphabet.join("")+"]+?(?:\s|$)", "g");
var string1 = "abcde वायरस abcde";
var string2 = "abcde abcde";
[ string1.match(regex), string2.match(regex) ].forEach(function(match) {
if(match) {
console.log("String contains " + match.length + " words with Hindi characters only.");
} else {
console.log("String does NOT contain any words with Hindi characters only.");
}
});