Regex 使用kohana路由的正则表达式负浮点

Regex 使用kohana路由的正则表达式负浮点,regex,kohana,routes,Regex,Kohana,Routes,我想知道为什么这个正则表达式不能在kohana上检索浮点负数 正则表达式: ^(-|)\d+((.|,)\d+|)$ 科哈纳路线: Route::set('route','data/<data>',array("data"=>"^(-|)\d+((.|,)\d+|)$")); Route::set('Route','data/',数组('data“=>”^(-)\d+((.|,)\d+)$); 我试过这个正则表达式,它很管用,你知道为什么它在科哈纳路线上不管用吗 谢谢您的

我想知道为什么这个正则表达式不能在kohana上检索浮点负数

正则表达式:

^(-|)\d+((.|,)\d+|)$
科哈纳路线:

Route::set('route','data/<data>',array("data"=>"^(-|)\d+((.|,)\d+|)$"));
Route::set('Route','data/',数组('data“=>”^(-)\d+((.|,)\d+)$);
我试过这个正则表达式,它很管用,你知道为什么它在科哈纳路线上不管用吗


谢谢

您的正则表达式不必要地复杂,并且有一个错误。
(.|,)
中的
不匹配句点,但匹配任何字符(正则表达式中点的含义,字符类之外)。我们要么需要转义点,如
\.
,要么将其包含在字符类中,如
[,]

请尝试使用此压缩正则表达式:

^-\d+[,]\d+$
^-\d+([,]\d+)?$
如果要使小数部分为可选部分

您原来的正则表达式建议您允许使用逗号。如果没有,请使用以下选项:

如果要使小数部分可选,请使用
^-\d+\.\d+$
^-\d+(\.\d+)?$

解释正则表达式

^                        # the beginning of the string
-                        # '-'
\d+                      # digits (0-9) (1 or more times (matching
                         # the most amount possible))
[.,]                     # any character of: '.', ','
\d+                      # digits (0-9) (1 or more times (matching
                         # the most amount possible))
$                        # before an optional \n, and the end of the
                         # string

可能是URL编码的,不需要转义
?另外,
(..)
更具可读性。如果您在
数据/
之后忘记了关闭
。此外,您可能需要删除前导的
^
和尾随的
$
;我没有使用Kohana的经验,但我没有看到在中的任何示例中使用这些锚。我添加了撇号“谢谢…”。。我想科哈纳不喜欢“|”谢谢你的回答,我用“(?)\d+(\)\d+”解决了它。谢谢你提供的所有细节。它非常有用,我会把你的问题标记为好的=)@zeomega谢谢,下次见。:)