我尝试比较两个字符串第一个ASCII(英语)和第二个Unicode(中文)。 用户需要在textarea中键入消息,javascript将计算文本的长度并显示一些消息。
现在它仅适用于ASCII(英语),但我需要进行比较,因为ASCII和Unicode的条件不同。
以下是我当前的代码段:
$('#myinput').keyup(function() {
if(this.value.length<=152)
$('#charcount').text('We will deduct 1 credit for this message per contact'),
$('#credit_value').val('1');
else if(this.value.length>152 && this.value.length<298)
$('#charcount').text('We will deduct 2 credit for this message per contact'),
$('#credit_value').val('2');
else if (this.value.length>=298 && this.value.length<450)
$('#charcount').text('We will deduct 3 credit for this message per contact'),
$('#credit_value').val('3');
else if (this.value.length>=450 && this.value.length<596)
$('#charcount').text('We will deduct 4 credit for this message per contact'),
$('#credit_value').val('4');
else if (this.value.length>=602 && this.value.length<754)
$('#charcount').text('We will deduct 5 credit for this message per contact'),
$('#credit_value').val('5');
})
</script>
对于ASCII(英文)我从152开始,但在Unicode(中文)中,我需要从60开始并增加......
以下是我在php中用来检查英文或中文的文本/字符串的代码
// check if message is type in chinese or english/UTF8
if (preg_match("/\p{Han}+/u", $message)) {
$msg_type = '2';
//this is chinese
} else {
$msg_type = '1';
//this is UTF8/English
}
所以我的问题现在我需要检查字符串是ASCII还是Unicode的类型然后如果中文启动条件值为60或英语以152开头。
检查我的jsfiddle here
答案 0 :(得分:3)
取自Answer
以下正则表达式[^\x00-\x80]+
可用于测试非ASCII字符。 (非Unicode字符[^\u0000-\u0080]+
)
我认为你想要匹配非ASCII字符,这在你的问题中没有明确说明
更新: 如果您只想匹配中文字符,请改用
var isChinese = /[\u4E00-\u9FFF\u6300-\u77FF\u7800-\u8CFF\u8D00-\u9FFF]+/
鉴于此,您可以test
RegExp
对文本显示相应的消息
我为了演示简单而略微修改了代码,它只占了60/152的步骤
var charCount = $('#charcount')
$('#myinput').keyup(function () {
var text = this.value;
var isChinese = /[^\x00-\x80]+/
var step = isChinese.test(text) ? 60 : 152;
charCount.text('We will deduct '+ ~~(1 + ((text.length - 1) / step)) +' credit for this message per contact. Characters: '+text.length);
})
在JSFiddle
上有一个Demo所以我稍微改了一下,为非中文Unicode字符显示错误。并让您定义自定义范围
var charCount = $('#charcount');
$('#myinput').keyup(function () {
var text = this.value;
var isChinese = /[\u4E00-\u9FFF\u6300-\u77FF\u7800-\u8CFF\u8D00-\u9FFF]+/.test(text);
if (!isChinese && (/[^\x00-\x80]+/.test(text))) {
charCount.text("Error: Neither ASCII nor Chinese Unicode Character Entered");
return;
}
var credits = {
chinese: [
[1, 60],
[60, 130],
[130, 190]
],
english: [
[1, 152],
[152, 298],
[298, 450],
[450, 596],
[602, 754]
]
};
var _credits = credits[isChinese ? "chinese" : "english"];
var i;
for (i = _credits.length; i > 1; i--) {
if (text.length >= _credits[i - 1][0] && text.length < _credits[i - 1][1]) break;
}
charCount.text('We will deduct ' + i + ' credit for this message per contact. Characters: ' + text.length);
});
继承人Fiddle为你