如何在设置键时比较javascript中的值
我尝试比较两个字符串,第一个是ASCII(英文),第二个是Unicode(中文)。 用户需要在textarea中键入消息,javascript将计算文本的长度并显示一些消息 现在它只适用于ASCII(英语),但我需要进行比较,因为ASCII和Unicode的条件不同 下面是我当前的代码片段: 所以我现在的问题是,我需要检查字符串的类型是ASCII还是Unicode,如果中文的起始条件值是60,或者英文的起始条件值是152 检查我的JSFIDLE取自此 以下正则表达式如何在设置键时比较javascript中的值,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我尝试比较两个字符串,第一个是ASCII(英文),第二个是Unicode(中文)。 用户需要在textarea中键入消息,javascript将计算文本的长度并显示一些消息 现在它只适用于ASCII(英语),但我需要进行比较,因为ASCII和Unicode的条件不同 下面是我当前的代码片段: 所以我现在的问题是,我需要检查字符串的类型是ASCII还是Unicode,如果中文的起始条件值是60,或者英文的起始条件值是152 检查我的JSFIDLE取自此 以下正则表达式[^\x00-\x80]+可
[^\x00-\x80]+
可用于测试非ASCII字符。([^\u0000-\u0080]+
用于非Unicode字符)
我假设您希望与非ASCII字符匹配,这在您的问题中没有明确说明
更新:
如果只想匹配汉字,请使用此选项
var isChinese=/[\u4E00-\u9FFF\u6300-\u77FF\u7800-\u8CFF\u8D00-\u9FFF]+/
考虑到这一点,您可以根据文本测试RegExp
,并显示相应的消息
为了简化演示,我对代码做了一些精简,它只考虑了60/152的步骤
这是一个关于JSFiddle的例子
更新
所以我对它做了一些修改,以显示非中文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);
});
var charCount=$('#charCount');
$('#myinput').keyup(函数(){
var text=this.value;
变量isChinese=/[\u4E00-\u9FFF\u6300-\u77FF\u7800-\u8CFF\u8D00-\u9FFF]+/.test(文本);
如果(!isChinese&(/[^\x00-\x80]+/.test(text))){
text(“错误:未输入ASCII或中文Unicode字符”);
返回;
}
风险值信用={
中文:[
[1, 60],
[60, 130],
[130, 190]
],
中文:[
[1, 152],
[152, 298],
[298, 450],
[450, 596],
[602, 754]
]
};
var_credits=学分[中文?:“英文];
var i;
对于(i=_credits.length;i>1;i--){
如果(text.length>=\u学分[i-1][0]&&text.length<\u学分[i-1][1])中断;
}
charCount.text('我们将为每个联系人的此邮件扣除'+i+'积分。字符:'+text.length);
});
这里还有另一个问题您想只识别中文还是所有非ascii字符?我想识别中文是否使用中文条件以及英文/ascii是否使用自己的条件……如果遇到既不是中文也不是ascii的unicode字符,该怎么办?此文本框只允许标准英文和中文。。除此之外,可能还应该回应一些错误消息。@Russly就我所知,为什么每个消息的中文Unicode字符限制为60?它们的字节长度不是3吗?感谢@C5H8NNaO4的工作,但我不知道如何添加更多的条件,比如如果超过298(3个学分)、450(4个学分)等等。数量是否在相同的步骤中增加?
// 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
}
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);
})
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);
});