2015-07-19 55 views
1

匹配未知长度的字符串 - 我从窗体中的用户处获取输入。
预期输入格式为[number][comma][number][comma] etc...
该输入的示例为3,43,1,238,24数字后跟任意数量的[逗号] [数字]

只要输入允许,模式可以继续,任何长度的数字都被接受。

我想使用正则表达式来确保用户已正确格式化他们的条目。首先,我使用str_replace去掉响应中的任何空格(以防用户在逗号后输入空格)。

但我很困惑如何匹配未知长度的模式。以下工作?

/\d+,\d+/ 

我的印象是这不起作用。它只会匹配模式中的前两个数字,并且没有任何数字。有任何想法吗?

如果它的事项,我使用PHP 5.6.10 v

+1

为什么不试试我们自己:https://regex101.com/?! (https://regex101.com/r/cB4kJ4/1) – Rizier123

回答

4

你会使用类似/^\d+(?:,\d+)*$/。这意味着:

^  # beginning of string 
\d+ # one or more digits 
(?: # group (but don't capture) 
    , # a comma 
    \d+ # one or more digits 
)*  # ... zero or more of this group 
$  # end of string 

这对待像3,43,1,238,24一个输入作为随后(任意多)逗号数对(,43,1,238,24) “头”(3)。

-1

您可以使用此模式:/(\d+)[^,]?+/gm

https://regex101.com/r/gF1tO3/1

由于PHP PCRE不具有全局(G)改性剂,你应该将其删除,并使用preg_match_all()

例子:

$str = '55, 44, 23 , 65 , 99, 
234, 5 34,'; 

preg_match_all('/(\d+)[^,]?+/', $str, $matches); 

print_r($matches); 

希望它能帮助!

+1

“我想使用正则表达式来确保用户已正确格式化其条目。”这个答案似乎没有帮助。 – melpomene

+0

嗨@melpomene,我相信在我提出的解决方案中,即使用户在逗号前后输入空格,他也可以从输入中捕获数字。 –

+0

是的,如果输入格式正确,你的正则表达式恰好可以用来提取数字(尽管这里有'[^,]'应该做什么?')。但问题是如何验证良构,而不是假设它。根据规则,你自己的例子('... 5 34,')是无效的:应该有一个5到34之间的逗号,最后没有。 – melpomene