gpt4 book ai didi

javascript - 需要一个需要大写或小写字母的 JavaScript 正则表达式

转载 作者:数据小太阳 更新时间:2023-10-29 05:39:32 24 4
gpt4 key购买 nike

我有一个正则表达式,现在只允许小写字母,我需要一个需要小写或大写字母的正则表达式:

/(?=.*[a-z])/

最佳答案

你无法从这里到达那里

I have a regex that right now only allows lowercase letters, I need one that requires either lowercase or uppercase letters: /(?=.*[a-z])/

不幸的是,它是utterly impossible to do this correctly using Javascript !阅读this flavor comparison’s ECMA column Javascript 不能做的所有事情。

理论与实践

小写的正确模式是标准的 Unicode 派生二进制属性 \p{Lowercase},大写的正确模式类似地是 \p{Uppercase}。这些是规范属性,有时在某些特殊情况下会在其中包含非字母。

仅使用一般类别属性,您可以为 Lowercase_Letter 使用 \p{Ll},为 Uppercase_Letter 使用 \p{Lu},并为 \p{Lt } 用于标题字母。请记住它们是 Unicode 中的 三种 情况,而不是两种)。有一个标准别名 \p{LC},意思是 [\p{Lu}\p{Lt}\p{Ll}]

如果您想要一个不是小写字母的字母,您可以使用(?=\P{Ll})\pL。手写形式是 (?=\P{Lowercase_Letter})\p{Letter}。同样,这些混合了 \p{Lowercase} 识别的一些 Other_Lowercase 代码点。我必须再次强调,Lowercase 属性是 Lowercase_Letter 属性的超集。

记住上一段,在我写的较低的地方换成较高的位置,你得到的大写字母也是一样的。

可能的平台

因为访问这些基本属性是 Unicode regular expressions 所需的最低级别的关键功能,某些版本的 Javascript 以我上面编写的方式实现它们。但是,Javascript 的标准仍然不需要它们,因此您通常不能指望它们。这意味着不可能在所有 Javascript 实现下都正确执行此操作。

可以以最低限度完成您想做的事情的语言包括:

  • C♯ 和 Java(通用类别)
  • Ruby 当且仅当 v1.9 或更高版本(仅二进制属性,包括一般类别)
  • PHP 和 PCRE(仅常规类别和脚本属性以及一些额外的属性)
  • ICU 的 C++ 库和 Perl,它们都支持所有 Unicode 属性

在上面列出的那些中,只有最后一行——ICU 和 Perl——严格且完全满足所有 1 级合规性要求(加上一些 2 级和 3 级)以正确处理正则表达式中的 Unicode。但是,我在上一段的要点中列出的所有这些都可以轻松处理大部分,很可能是您需要的所有内容。

然而,Javascript 不在其中。不过,如果您非常幸运并且永远不必在仅标准的 Javascript 平台上运行,您的版本可能会如此。

总结

非常遗憾,你不能真正使用 Javascript 正则表达式来处理 Unicode 除非你有一个非标准的扩展。有些人会,但大多数人不会。如果不这样做,您可能不得不使用不同的平台,直到相关的 ECMA 标准 catch 21 世纪(Unicode 3.1 十年前就出来了!!)。

如果有人知道实现 UTS#18 on Unicode Regular Expressions 的 1 级要求的 Javascript 库包括RL1.2 “Properties”RL1.2a “Annex C: Compatibility Properties”插话。

关于javascript - 需要一个需要大写或小写字母的 JavaScript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4875974/

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