如何在设置键时比较javascript中的值

如何在设置键时比较javascript中的值,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我尝试比较两个字符串,第一个是ASCII(英文),第二个是Unicode(中文)。 用户需要在textarea中键入消息,javascript将计算文本的长度并显示一些消息 现在它只适用于ASCII(英语),但我需要进行比较,因为ASCII和Unicode的条件不同 下面是我当前的代码片段: 所以我现在的问题是,我需要检查字符串的类型是ASCII还是Unicode,如果中文的起始条件值是60,或者英文的起始条件值是152 检查我的JSFIDLE取自此 以下正则表达式[^\x00-\x80]+可

我尝试比较两个字符串,第一个是ASCII(英文),第二个是Unicode(中文)。 用户需要在textarea中键入消息,javascript将计算文本的长度并显示一些消息

现在它只适用于ASCII(英语),但我需要进行比较,因为ASCII和Unicode的条件不同

下面是我当前的代码片段:

所以我现在的问题是,我需要检查字符串的类型是ASCII还是Unicode,如果中文的起始条件值是60,或者英文的起始条件值是152

检查我的JSFIDLE

取自此

以下正则表达式
[^\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);
});