2010-07-29 44 views
0

你好我怎样才能让我只允许数字[^ 0-9]和数字前面的减号。例如: 有效值= -1 ...- 9,无效= --1 -...在preg_replace帮助申请例外

+0

[^ 0-9]匹配“*不*一个数字,从0-9' 。 – 2010-07-29 18:40:09

回答

2

只是删除所有的无效字符,并检查其余有一个有效的格式:

$cleaned = preg_replace('/[^-0-9]+/', '', $str); 
if (preg_match('/^-?[0-9]+$/', $cleaned)) { 
    // now valid 
} 

好吧,这里是另一个建议:

preg_replace('/.*?(-?\d+).*/', '$1', $str) 
+0

谢谢,但是当我应用它时,它什么也不返回: var_dump(preg_replace('/(^ - ?[0-9 ] +)?。* |^[^ - 0-9] + /','$ 1',' - $ ---- matches-- 12--')); //输出字符串''(长度= 0) – jartaud 2010-07-29 19:14:23

+0

@jartaud:我撤回了我的第一个建议。 – Gumbo 2010-07-29 19:28:46

+0

全景图是:Im为_GET变量扫描,帮助我使用JS go方法。现在我想要做的是删除除减号以外的所有字符?get = - 2'''#$%$%$应该是:?get = -2 – jartaud 2010-07-29 19:29:07

1

应尽可能简单...

preg_match('#^-?[0-9]$#', $input); 

更新

preg_replace('#-\d#', $replacement, $input); 
+0

注意问号使得减号是可选的,如果需要删除问号。 – 2010-07-29 18:38:51

+0

感谢您的帮助,是的,标志是必需的,我只需要在前面(-digit) – jartaud 2010-07-29 18:41:43

+0

我添加了基于新信息的更新。 – 2010-07-29 18:58:33

1
/^-\d+$/ 

,或者如果减去是可选

/^-?\d+$/