2

我正在使用正则表达式来验证后跟分数的模式。我找到了这些,它们符合我的需要。总的来说,我想匹配1 to 2数字后跟分数。这些表达方式有何不同?

/^[0-9]+(?:[\xbc\xbd\xbe])$/ugm

/^\d+(?:[\xbc\xbd\xbe])$/ugm

/^\w+(?:\w+)$/ugm

我需要匹配以下内容:

12½
1¼
11¾

但不匹配..

111½
11111¼ 
0¾
4

3 回答 3

2

好的开始,[0-9]匹配任何字符:(09)并且不一样\d

\d匹配数字 ( 0-9) 和其他数字字符,例如Unicode

\w匹配任何单词字符(字母数字下划线

尽管这些给定的表达式可能匹配相同的模式,但使用第三种解决方案最终会失败。它将匹配一个模式foobar,如您所见0-9,该模式中没有 ( ) 字符或 Unicode 分数。

通过运行快速基准测试,您的第二个解决方案16%比您的第一个解决方案慢,而且它匹配 Unicode 和其他数字字符。

我会坚持使用您的第一个表达式,并将其更改为1-2数字字符之间的匹配。

/^[1-9][0-9]?(?:[\xbc\xbd\xbe])$/ugm

甚至

/^[1-9][0-9]?(?:[\xbc-\xbe])$/ugm
于 2013-10-03T17:33:17.140 回答
1

尝试以下操作:

^[1-9][0-9]?[\xbc\xbd\xbe]$

[0-9]并且\d是等价的。\w匹配“单词”字符。该表达式[1-9]匹配一个不为零的数字(因为您特别询问了如何排除该数字)。

这对一些遗留的 8 位字符集进行了硬编码;为了将来的兼容性,您应该考虑切换到 Unicode。

于 2013-10-03T17:30:40.950 回答
1

你可以试试

 /^[1-9][0-9]?(?:[\xbc\xbd\xbe])$/ugm
于 2013-10-03T17:31:03.703 回答