2

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

4

1 回答 1

3

取自这个答案

以下正则表达式[^\x00-\x80]+可用于测试非 ASCII 字符。[^\u0000-\u0080]+对于非 Unicode 字符)

我假设你想匹配非 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的演示

更新

所以我改变了一点,显示非中文 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);
});

这是给你的另一个小提琴

于 2013-03-26T15:23:51.757 回答