我正在使用正则表达式来验证模式后跟一个分数。我发现了这些,它们符合我的需要。总的来说,我希望匹配1 to 2
数字,后跟分数。这些表达方式有何不同?
/^[0-9]+(?:[\xbc\xbd\xbe])$/ugm
/^\d+(?:[\xbc\xbd\xbe])$/ugm
/^\w+(?:\w+)$/ugm
我需要匹配以下内容:
12½
1¼
11¾
但不匹配..
111½
11111¼
0¾
答案 0 :(得分:2)
首先,[0-9]
匹配以下任何字符:(0
至9
)并且与\d
\d
匹配数字(0-9
)和其他数字字符,例如Unicode。
\w
匹配任何单词字符(字母,数字或下划线)
虽然这些给定的表达式可能匹配相同的模式,但您最终将无法使用 3rd 解决方案。
它将匹配foobar
之类的模式,因为您可以看到此模式中没有(0-9
)个字符或Unicode分数。
通过运行快速基准测试,您的第二解决方案比第一个解决方案慢16%
,而且它与Unicode和其他数字字符匹配。
我会坚持使用您的第一个表达式,并将其更改为匹配1-2
个数字字符。
/^[1-9][0-9]?(?:[\xbc\xbd\xbe])$/ugm
甚至
/^[1-9][0-9]?(?:[\xbc-\xbe])$/ugm
答案 1 :(得分:1)
尝试以下方法:
^[1-9][0-9]?[\xbc\xbd\xbe]$
[0-9]
和\d
是等效的。 \w
匹配“字”字符。表达式[1-9]
匹配一个非零的数字(因为您特别询问如何排除该数字)。
这对于一些传统的8位字符集来说是没有吸引力的硬编码;为了将来的兼容性,您应该考虑切换到Unicode。
答案 2 :(得分:1)
你可以尝试
/^[1-9][0-9]?(?:[\xbc\xbd\xbe])$/ugm