Javascript:获得最高可能的UTF8字符

时间:2012-06-26 09:47:48

标签: javascript utf-8

我需要为前缀搜索获得尽可能高的UTF8字符。

我有这样的数据集:

A
Ba
Bf
C

现在我可以通过指定开始和结束值来进行前缀搜索:

Start: B
End: B* where * should be the highest possible UTF8 character.

如何使用Javascript以编程方式获取此内容?

编辑:这是一个更好的例子:

我需要将此前缀发送到JSON RPC API。所以我不能在JS中进行实际比较。

但是如果我想用B开头的两个字符串,我会发送

Start: B 
End: B? 

在哪里?是最大可能的UTF8角色。

如果是ASCII,我可以"B" + String.fromCharCode(255),但这只适用于ASCII。我的字符串是UTF8,在这种情况下,它不匹配以B开头的所有可能的字符串。

5 个答案:

答案 0 :(得分:3)

根据您的代码,您可能不需要实际最高的UTF8代码点。

if ((input >= 'B') && (input < 'C')) { ... }

可以帮到你。

答案 1 :(得分:2)

const maximumCodePoint = String.fromCodePoint(0x10ffff)

> String.fromCodePoint(0x10ffff + 1)
RangeError: Invalid code point 1114112

答案 2 :(得分:0)

您可以使用> comparison operator在JavaScript中对字符串开头进行UTF代码点比较。所以你可以使用

search >= "B" && search < "C"

,但很简单

search.test(/^B.*/)

search.charAt(0) == "B"

也应该这样做。

答案 3 :(得分:0)

在我看来,你想要:

var datas = [
    'A',
    'Bf',
    'Ba',
    'C'
];

// Create an array with char codes prefixed with "B" but it returns
// for the second string. For example, for B*, it returns the char code of *.
var datasB = datas.map( function( data ) {
    if ( data.charAt( 0 ) === 'B' ) {
        return data.substr( 1 ).charCodeAt( 0 );
    }
} ).filter( Boolean );
// The `filter( Boolean )` removes the falsy values (undefined)

// This technique is very efficient to get the maximum value of an array
var max = Math.max.apply( Math, datasB );

John Resig对获取数组最大值的技术的启发。

答案 4 :(得分:0)

如果您想制作范围,可以使用\uffff

MyRange("foo", "foo\uffff")

将找到以foo开头的所有内容。