假设我有这些文本'x34','150px','650dpi','e3r4t5'...我怎么才能得到数字?我的意思是我想要34,150,650,345而没有任何其他角色。我的意思是将这个字符串所包含的数字转换成一个变量。
答案 0 :(得分:22)
$str = "e3r4t5";
$str_numbers_only = preg_replace("/[^\d]/", "", $str);
// $number = (int) $str;
答案 1 :(得分:14)
很抱歉加入潮流,而不是使用Regex,我建议您使用PHP的内置功能,这可能比Regex更快。
e.g。从给定的字符串中获取数字
<?php
$a = '!a-b.c3@j+dk9.0$3e8`~]\]2';
$number = str_replace(['+', '-'], '', filter_var($a, FILTER_SANITIZE_NUMBER_INT));
// Output is 390382
?>
为了坚持更严格的问题标准,我已经更新了我的答案,以便给出更好的结果。
我添加了str_replace,因为FILTER_SANITIZE_NUMBER_FLOAT
或INT
标志不会从字符串中删除+
和-
个字符,因为它们是PHP的一部分例外规则。
虽然它使过滤器位变长,但它现在失败或给你意想不到的结果的可能性更小,而且这将比REGEX更快。
修改强>
1:意识到使用FILTER_SANITIZE_NUMBER_FLOAT
,PHP不会剥离这些字符可选 .,eE
,因此只能得到纯数字请善用FILTER_SANITIZE_NUMBER_INT
2:如果您的PHP版本低于 5.4 ,请使用array('+', '-')
代替短数组语法['+', '-']
。< / p>
答案 2 :(得分:11)
您可以使用正则表达式删除任何不是数字的字符:
preg_replace('/\D/', '', $str)
此处模式\D
描述任何不是数字的字符(\d
的补充)。
答案 3 :(得分:6)
如果您使用的是PHP 5.2.X,5.3.x,5.4,请使用PHP FILTER函数。强烈推荐
$mixed_input = "e3r4t5";
$only_numbers = filter_var($mixed_input, FILTER_SANITIZE_NUMBER_INT);
请通过this link了解更多信息
答案 4 :(得分:3)
替换非数字的所有内容并使用该值。
$str = "foo1bar2baz3";
$num = intval(preg_replace("/[^0-9]/", "", $str));
答案 5 :(得分:1)
您可以使用以下功能
function extract_numbers($ string){
preg_match_all('/([\ d] +)/',$ string,$ match);
返回$ match;
}