我正在尝试通过preg_replacing过滤字符串。除了数字和点之外的任何东西,在点之前不超过5个数字。在wamp(UptoDate)下的PHP 5.4.3。
Good Matche:
糟糕的比赛:
我遇到的第一个问题是我无法删除(,)逗号,我只想保留一个(。)点作为分隔符。请记住,这是一个价格字符串。 Php似乎不用(,)逗号来计算,所以我希望输入只能用。而不是逗号。所以我使用(^),否定字符类,然后0-9。 。然后我添加要匹配的字符数。我在1-5之间(1或2或3或...... 5
我做错了什么。
以下是我一直用来帮助的信息: http://www.regular-expressions.info/reference.html http://www.expreg.com/options.php
<?php $string = 'asd321asd321df564d.fasd321asd12';
$string = cleanabc123($string);
function cleanabc123($data) { $data =
preg_replace("/([^0-9\s\.]){1,5}/u", "", $data); return $data; }
// This will be 'username' now echo $string; ?>
答案 0 :(得分:1)
反转你的意图更有意义:使用preg_match()只能找到一个好的结果。否则返回FALSE或NULL。
这样,您的正则表达式将更易于编写和理解。
顺便说一下,你现在这样做的方式,你最好使用preg_replace("/[^\d\.]/u", "", $str)
,替换所有不正确的字符而不管其位置。
答案 1 :(得分:0)
我会替换
preg_replace("/([^0-9\s\.]){1,5}/u", "", $data);
与
$match = preg_match("/^[0-9]+([,.][0-9]{1,5})?$/u", $data);
我希望在这种情况下使用preg_match
,我会返回$match
。