【问题标题】:JS : Test if string contains any unicode capitalJS:测试字符串是否包含任何 unicode 大写
【发布时间】:2016-06-08 19:05:02
【问题描述】:

你知道是否有一个 js 正则表达式可以捕获任何可能的 unicode 大写字母。当然 [A-Z] 有效,但有数千个备用大写字母。 提前感谢您的提示。

【问题讨论】:

标签: javascript regex unicode


【解决方案1】:

JavaScript 正则表达式(至少 ecmascript 5 及以下版本)中唯一的 Unicode 支持是匹配 \uFFFF 形式的特定代码点。您可以在字符类的范围内使用它们。 (见question

这当然会使您的任务变得困难。但我确实找到了一个online utility 说:

编译适合在 JavaScript 中使用的字符范围,使用 cset 库。

然后,选择“大写字母”会生成这个正则表达式:

[A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸ-ŹŻŽƁ-ƂƄƆ-ƇƉ-ƋƎ-ƑƓ-ƔƖ-ƘƜ-ƝƟ-ƠƢƤƦ-ƧƩƬƮ-ƯƱ-ƳƵƷ-ƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺ-ȻȽ-ȾɁɃ-ɆɈɊɌɎͰͲͶΆΈ-ΊΌΎ-ΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹ-ϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀ-ӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԱ-ՖႠ-ჅḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾ-ℿⅅↃⰀ-ⰮⱠⱢ-ⱤⱧⱩⱫⱭ-ⱯⱲⱵⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽ-ꝾꞀꞂꞄꞆꞋA-Z]|\ud801[\udc00-\udc27]|\ud835[\udc00-\udc19\udc34-\udc4d\udc68-\udc81\udc9c\udc9e-\udc9f\udca2\udca5-\udca6\udca9-\udcac\udcae-\udcb5\udcd0-\udce9\udd04-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd38-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd6c-\udd85\udda0-\uddb9\uddd4-\udded\ude08-\ude21\ude3c-\ude55\ude70-\ude89\udea8-\udec0\udee2-\udefa\udf1c-\udf34\udf56-\udf6e\udf90-\udfa8\udfca]

我还读到(但未亲自使用)XRegExp javascript library 很好,可以让您使用\p{Lu}

【讨论】:

  • 我无法让 XRegExp 工作,因为我的项目不是关于 web 而是 ExtendScript aka Javascript for Adob​​e。但你的第一个建议似乎做到了:)
【解决方案2】:

这是一个包含所有 Unicode 大写字母的链接。这是基于Adobe InDesign CC2015的GREP引擎,搜索posix表达式[[:upper:]]:

http://www.id-extras.com/uploads/AllUnicodeCapitals.html

【讨论】:

    【解决方案3】:

    在任何支持 ECMAScript2018+ 标准的 JavaScript 环境中,您都可以使用

    /\p{Lu}/u
    

    测试字符串是否包含任何 Unicode 大写字母。

    查看 JavaScript 演示:

    console.log(/\p{Lu}/u.test('... Yes!'));
    console.log(/\p{Lu}/u.test('Łąka'));
    console.log(/\p{Lu}/u.test('и Витя с ними'));
    console.log(/\p{Lu}/u.test('nonono'));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-31
      • 2012-02-18
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 2018-11-20
      相关资源
      最近更新 更多