开发者

php preg_replace , I need to replace everything after a dot (e.g 340.38888 > need to get clean 340)

开发者 https://www.devze.com 2022-12-31 00:19 出处:网络
I need to replace everything after a dot . I know that it can 开发者_开发技巧be done with regex but I\'m still novice and I don\'t understand the proper syntax so please help me with this .

I need to replace everything after a dot . I know that it can 开发者_开发技巧be done with regex but I'm still novice and I don't understand the proper syntax so please help me with this .

I tried the bellow code but doesn't work :

  $x = "340.888888";
$pattern = "/*./"
 $y = preg_replace($pattern, "", $x);
print_r($x);

thanks , Michael


I may be wrong, but this sounds like using the RegEx hammer for an eminently non-nail shaped problem. If you're just trying to truncate a positive floating point number, you can use

$x = 340.888888;
$y = floor($x);

Edit: As pointed out by Techpriester's comment, this will always round down (so -3.5 becomes -4). If that's not what you want, you can just use a cast, as in $y = (int)$x.


As already mentioned by others: there are better ways to get the integer part of a number.

However, if you're asking this because you want to learn some regex, here's how to do it:

$x = "340.888888";
$y = preg_replace("/\..*$/", "", $x);
print_r($y);

The regex \..*$ means:

\.    # match the literal '.'
.*    # match any character except line breaks and repeat it zero or more times
$     # match the end of the string


You could also do...

$x = "340.888888";
$y = current(explode(".", $x));


The . in regex means "any characters (except new line). To actually match a dot, you need to escape it as \..

The * is not valid by itself. It must appear as x*, which means the pattern "x" repeated zero or more times. In your case, you need to match a digit, where \d is used.

Also, you wouldn't want to replace Foo... 123.456 as Foo 123. The digit should appear ≥1 times. A + should be used instead of a *.

So your replacement should be

$y = preg_replace('/\\.\\d+/', "", $x);

(And to ensure the number to truncate is of the form 123.456, not .456, use a lookbehind.

$y = preg_replace('/(?<=\\d)\\.\\d+/', "", $x);
0

精彩评论

暂无评论...
验证码 换一张
取 消