如何在keyup中比较javascript中的值

时间:2013-03-26 14:59:44

标签: javascript jquery javascript-events

我尝试比较两个字符串第一个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

1 个答案:

答案 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为你