如何以不同的形式提取n位数(用空格分隔) - PHP

时间:2014-07-17 01:20:34

标签: php regex

我需要从不同的文本文件中提取一个8位数字。问题是每个数字之前和之后可能有或可能没有空格,如下所示。

每个客户放置空间,但它认为它使数字更具可读性,因此提取它的问题。

 33113306
 33 11 33 06
  3311 3306

可能有超过8位的数字。那些应该被忽略。例如。

 33 11 33 06 //the number we need
 28 232392 93293293923 // the number we don't need

在第一个数字之前总是有一个空格。 我们需要的8位数字放在“单词”或其他字符之间。但是有时候我们会在新线上有新词。例如。 这是一个数字

 Al : 33 11 33 06 ,
 Another number we don't need 232 2323 232 2, ..sdsad

我正在使用带有preg_match的PHP,而我的旧正则表达式失败,因为这个新的“功能”允许客户端以不同的形式定义数字。

^(\d){8}$

4 个答案:

答案 0 :(得分:1)

您可以删除非数字字符,并获取字符串的前8个字符:

echo substr(preg_replace("/[^0-9,.]/", "", $string), 0, 8);

答案 1 :(得分:1)

您可以使用PHP的filter_var函数来过滤掉除数字,加号和减号之外的所有内容。然后使用str_replace删除减号和加号(如果有的话):

$string=str_replace("+","",str_replace("-","",filter_var($string, FILTER_SANITIZE_NUMBER_INT)));
if(strlen($string)!=8){
    echo "Error";
} else {
    echo "Success";
}

答案 2 :(得分:0)

使用您当前的输入,您可以使用:

[ ]\K(?<!\d )(?=(?: ?\d){8})(?!(?: ?\d){9})\d[ \d]+\d

the regex demo中查看匹配和不匹配的内容。

答案 3 :(得分:0)

[^ \d]+(\d\s*){8}[^ \d]+

试试这个