2

最初のASCII(英語)と2番目のUnicode(中国語)の2つの文字列を比較しようとしています。ユーザーは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 に答える