繁体   English   中英

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

[英]How to extract an n digits number in different forms ( separated by a space) - PHP

我需要从不同的文本文件中提取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}$

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

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

您可以使用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";
}

使用当前输入,您可以使用以下命令:

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

正则表达式演示中查看哪些匹配项与哪些不匹配项。

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

尝试这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM