我有一个正则表达式,现在只允许小写字母,我需要一个需要小写或大写字母:
/(?=.*[a-z])/
Run Code Online (Sandbox Code Playgroud)
tch*_*ist 21
我有一个正则表达式,现在只允许小写字母,我需要一个需要小写或大写字母:
/(?=.*[a-z])/
不幸的是,使用Javascript 完全无法正确执行此操作!阅读这个风味比较的ECMA专栏,了解Javascript 无法做到的所有事情.
小写的正确模式是标准的Unicode派生二进制属性\p{Lowercase},大写的正确模式是类似的\p{Uppercase}.这些是规范性属性,有时在某些特殊情况下包含非字母.
仅使用"常规类别"属性,可以使用Lowercase_Letter \p{Ll},\p{Lu}Uppercase_Letter和\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正则表达式所需的最低级别的关键功能,因此某些版本的Javascript以我上面编写它们的方式实现它们.但是,Javascript的标准仍然不需要它们,因此您通常不能指望它们.这意味着在Javascript的所有实现下都无法正确执行此操作.
可以最低限度地完成您想要的任务的语言包括:
在那些列出的bove中,只有最后一行--ICU和Perl - 严格完全满足所有1级合规性要求(加上一些级别2和3),以正确处理正则表达式中的Unicode.但是,我在前一段子弹中列出的所有内容都可以很容易地处理你需要的大部分内容,而且很可能是所有内容.
但是,Javascript不在其中.但是,您的版本可能非常幸运,而且永远不必在标准的Javascript平台上运行.
非常遗憾的是,除非你有非标准扩展,否则你不能真正使用Javascript正则表达式进行Unicode工作.有些人这样做,但大多数人没有.如果不这样做,您可能必须使用不同的平台,直到相关的ECMA标准赶上21世纪(Unicode 3.1在十年前问世!!).
如果有人知道在Unicode正则表达式上实现UTS#18的 1级要求的Javascript库,包括RL1.2"属性"和RL1.2a"附件C:兼容性属性",请插入.
Pla*_*ure 16
不确定您是指混合大小写,还是严格小写加严格大写.
这是混合案例版本:
/^[a-zA-Z]+$/
Run Code Online (Sandbox Code Playgroud)
严格的一个或另一个版本:
/^([a-z]+|[A-Z]+)$/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7874 次 |
| 最近记录: |