不使用正则表达式,确定一个Unicode字符是否为字母数字。

4

我需要确定一个Unicode字符是否属于任何语言脚本的字母数字字符。我没有访问正则表达式或与Unicode一起工作的任何有用API。我认为我的唯一解决方案是将Unicode值与一组字母数字字符范围进行比较。

问题是,我找不到这样的范围列表。

是否可以建议更好的解决方案,或者指向一个确定的字母数字范围列表进行比较?

谢谢,

Tim


你可以使用哪些工具(语言)? - Tim Pietzcker
2个回答

8
Unicode标准是关于此的规范信息来源。但是,您可以通过XRegExp Unicode插件获取信息作为快捷方式,该插件目前反映了Unicode 6.1(Unicode 6.2仅添加了一个非字母字符)。源代码中有一个包含基本多语言平面字母范围的字符串,对于大多数情况来说已经足够了。它相当长,范围没有分隔符,但所有代码编号都用四个十六进制数字表示。

0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05270531-055605590561-058705D0-05EA05F0-05F20620-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280840-085808A008A2-08AC0904-0939093D09500958-09610971-09770979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10CF10CF20D05-0D0C0D0E-0D100D12-0D3A0D3D0D4E0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC-0EDF0F000F40-0F470F49-0F6C0F88-0F8C1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510C710CD10D0-10FA10FC-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541


这个包含数字吗,还是只有字母? - Tim Pietzcker
它对应于一般类别的字母,因此它包含字母字符但不包括数字。 - Jukka K. Korpela
谢谢,我已经给你点赞了,但是我只能接受一个答案,所以我接受了第一个答案。 - tarmes
希望这也支持外星语言 :p - Rishul Matta

3
你可以查看Unicode字符数据库和PropList文件(这里是5.0示例),特别是'字符点-属性'映射。或者,你可以解析主列表文件(例如5.0版的此文件)(它非常庞大),获取你需要的所有带有属性的字符点(我想是L和N),然后从这些数据构建范围。此外,你没有提到你使用的工具,但我认为参考这个Perl模块(以及其分发包中的XS.xs文件)也可能会有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接