3

我正在尝试将一个值更改为textarea它只能包含十六进制数字。
例如,如果我有这个textarea

    RMCP01
    Mario Kart Wii

    CCP items
    * C27EF0EC 00000002
    * 3FE08000 93BF1500
    * 3BE00000 00000000
    * 28345842 ff7f0080
    * 8000000F 00000000
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 fffb0004
    * 8000000F 00000020
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 fffd0002
    * 8000000F 0000000B
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 7fff8000
    * 8000000F 00000009
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 bfff4000
    * 8000000F 00000004
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 efff1000
    * 8000000F 0000000E
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 fbff0400
    * 8000000F 0000000F
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 fff70008
    * 8000000F 00000007
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 ffdf0020
    * 8000000F 00000003
    * 8000000E 00000001
    * E0000000 00000000
    * E2000001 00000000
    * 48000000 809C1900
    * DE000000 80008180
    * 58010000 00000008
    * DE000000 80008180
    * 48100000 80001500
    * DE000000 80008180
    * 9421000F 0000008c
    * 14000090 00000001
    * E0000000 80008000

    Connect Hacker
    * 046592D8 3BA0270F

    VR
    * 28345842 ff7b0084
    * 48000000 809BD748
    * DE000000 90009380
    * 5A010000 00009050
    * 12000000 00008ae3
    * E0000000 00000000
    * 28345842 ddff2200
    * 48000000 809BD748
    * DE000000 90009380
    * 5A010000 00009050
    * 12000000 00000001
    * E0000000 00000000
    * 28345842 ff870078
    * 48000000 809BD748
    * DE000000 90009380
    * 5A010000 00009050
    * 12000000 00001388
    * CC000000 00000000
    * E0000000 80008000

    RBC
    * 045334B0 38000002
    * 04533510 2C000003

    Drift
    * 048B5CC0 00000000
    * 048B5CC4 00000000
    * 048B5CC8 00010000
    * 048B5B38 00010000

    Invicibilty
    * F6000001 80008100
    * A88301A8 3BC00000
    * 1400002C 60000000
    * F6000001 80008100
    * EC4300B2 C0630088
    * D2000020 00000002
    * 38000001 9803000A
    * 80030008 00000000
    * E0000000 80008000

    BBB
    283457E2 BFFE4001
    048B59F8 43960000
    E0000000 00000000
    283457E2 BFFD4002
    048B59F8 442F0000
    E0000000 00000000
    283457E2 FBEF0410
    048B59F8 43110000
    E0000000 00000000
    283457E2 EBFF1400
    048B59F8 40000000
    E0000000 00000000

    Deactivator
    * 28348200 FEFF0100
    * 8000000D 00000001
    * 48000000 809C1900
    * DE000000 80008180
    * 58010000 00000008
    * DE000000 80008180
    * 4A100000 0000008C
    * 30000000 00000014
    * 14000000 00000014
    * 14000004 00000000
    * E0000000 00000000
    * 28348200 FDFF0200
    * 8000000D 00000000
    * E0000000 80008000

结果是除了第一个字符之外的所有内容。(第一行更改为“MCP01”)这是我的代码:

        function check() {
            var c=$("#c").value;
            c=c.replace(/[^A-Fa-f0-9]/, "");
            return c;
        }

怎么了?

4

2 回答 2

8

您应该使用/g标志来执行全局替换:-

c=c.replace(/[^A-Fa-f0-9]/g, "");

请注意,这种方法可能会失败,因为在“ABRET”中,它只会替换R and T,但ABE不是有效的十六进制数字。

如果您只想保留十六进制数字,那么您可能应该将您的正则表达式更改为: -

/\b[0-9a-fA-F]{6}\b/g

上面的正则表达式只会匹配Hex数字。因此,只需替换与上述模式不匹配的每个子字符串。休息我留给你执行。

您还可以将上述正则表达式修改为: -

/\b[0-9A-F]{6}\b/gi

使用/i标志,正则表达式case-insensitive匹配。所以,A与 相同a

于 2012-12-23T11:20:11.500 回答
0

这些代码效果不够好,但它们很棒。这是我最终使用的代码:

var c=$("c").val();
var newc="";
var counter=0;
var newcstack="";
for (var i=0; i<c.length; i++) {
    if (c.charAt(i).match(/[A-Fa-f0-9]/)) {
        newcstack+=c.charAt(i);
        counter++;
        if (counter==8) {
            newc+=newcstack;
            counter=0;
            newcstack="";
        }
    }
    else {
        counter=0;
        newcstack="";
    }
}
return newc;
于 2012-12-23T11:51:27.750 回答