gpt4 book ai didi

javascript - keyup 时如何比较 JavaScript 中的值

转载 作者:行者123 更新时间:2023-11-29 19:57:56 24 4
gpt4 key购买 nike

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

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

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

<script>

$('#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 .

最佳答案

取自此Answer

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

我假设您想匹配非 ASCII 字符,但您的问题中并未明确说明这一点

更新:如果你只想匹配中文字符,请改用它

var isChinese =/[\u4E00-\u9FFF\u6300-\u77FF\u7800-\u8CFF\u8D00-\u9FFF]+/

鉴于此,您可以针对文本测试 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);
})

这是一个 Demo在 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);
});

这是另一个 Fiddle为你

关于javascript - keyup 时如何比较 JavaScript 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15640328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com