从字符串中删除非数字字符(不包括句点和逗号)(即删除除数字、逗号和句点之外的所有字符)

     2023-02-22     125

关键词:

【中文标题】从字符串中删除非数字字符(不包括句点和逗号)(即删除除数字、逗号和句点之外的所有字符)【英文标题】:Remove non-numeric characters (excluding periods and commas) from a string (i.e. remove all characters except numbers, commas, and periods) 【发布时间】:2022-01-22 22:06:41 【问题描述】:

如果我有以下值:

 $var1 = AR3,373.31

 $var2 = 12.322,11T

如何创建一个新变量并将其设置为删除了任何非数字字符(逗号和句点除外)的数据副本?上面的值将返回以下结果:

 $var1_copy = 3,373.31

 $var2_copy = 12.322,11

【问题讨论】:

对于希望从字符串中删除所有非数字字符(包括分隔符)的研究人员,请参阅 String Sanitization: How to remove all non-numeric characters from a string?(大约 2011 年 8 月) 【参考方案1】:

您可以使用preg_replace 替换所有非数字字符以及逗号和句点/句号,如下所示:

$testString = '12.322,11T';
echo preg_replace('/[^0-9,.]+/', '', $testString);

模式也可以表示为/[^\d,.]+/

【讨论】:

另见 php 函数 money_function() (php.net/manual/en/function.money-format.php) [^0-9] 将匹配任何非数字字符,因此无需添加逗号和句号。这就足够了: echo preg_replace('/[^0-9]/','',$testString); @billrichards 我不认为这是正确的。请记住,他希望保留逗号和句号以及数字字符,而不是删除它们。 @billrichards 正如 OP 所述(强调我的),“避免使用字母或字符逗号和点除外”。 那个句号不需要反斜杠吗?句号的意思是“任何字符”不是吗?【参考方案2】:

我很惊讶这里没有提到filter_var,因为这是一个老问题......

PHP 有一个使用sanitization filters 执行此操作的内置方法。具体来说,在这种情况下使用的是带有FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND 标志的FILTER_SANITIZE_NUMBER_FLOAT。像这样:

$numeric_filtered = filter_var("AR3,373.31", FILTER_SANITIZE_NUMBER_FLOAT,
    FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND);
echo $numeric_filtered; // Will print "3,373.31"

还值得一提的是,由于它是 PHP 内置的,它比在 PHP 的当前库中使用正则表达式要快(尽管字面意思是纳秒级)。

【讨论】:

【参考方案3】:

真正删除所有非数字字符的最简单方法:

echo preg_replace('/\D/', '', $string);

\D代表“任何非十进制数字的字符”

http://php.net/manual/en/regexp.reference.escape.php

【讨论】:

这不适用于 OP 的要求。这是另一个问题的正确答案。 @mickmackusa 你是对的。自从我写下这个答案以来,这个问题已经被大量编辑。不过,这似乎是有用的信息。 保留逗号和点的要求在整个编辑历史中一直保持一致。当不正确的答案被高度评价时,我总是很失望,因为 1. 答案误导了研究人员或发布在错误的页面上,以及 2. 回答者收到了他们不应该收到的“信任点”。 “在整个编辑历史中保留逗号和点的要求一直是一致的”是的,但直到这个答案几个月后,它才被标题的措辞所掩盖。 请考虑删除这个不正确的答案。不正确的答案会影响正确的答案,并可能使研究人员感到困惑,并浪费研究人员阅读不适当的见解的时间。这是另一个漏掉的内容示例:***.com/a/37500756/2943403当内容被证明不正确时,堆栈溢出是一种不太有效的研究工具。所有这些赞成票都是不正当的。【参考方案4】:

您可以使用filter_var 删除除数字、点和逗号之外的所有非法字符。

FILTER_SANITIZE_NUMBER_FLOAT 过滤器用于从字符串中删除所有非数字字符。 FILTER_FLAG_ALLOW_FRACTION 允许分数分隔符 " . " FILTER_FLAG_ALLOW_THOUSAND 的目的是从字符串中获取逗号。

代码

$var1 = '12.322,11T';

echo filter_var($var1, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND);

输出

12.322,11

阅读更多关于filter_var()和Sanitize filters的信息

【讨论】:

【参考方案5】:

如果字母总是在开头或结尾,您可以简单地使用 trim...不需要正则表达式

$string = trim($string, "a..zA..Z"); // this also take care of lowercase

"AR3,373.31" --> "3,373.31"
"12.322,11T" --> "12.322,11"
"12.322,11"  --> "12.322,11"

【讨论】:

重要:这只会从字符串中删除字母。其他字符,如空格、括号、引号等,都保留在结果中。 --> 如果你知道你的输入字符串只包含字母和数字,没有其他字符,只能使用这个解决方案!

从字符串和数字中删除逗号

】从字符串和数字中删除逗号【英文标题】:Removingcommasfromstringsandnumbers【发布时间】:2018-02-0503:06:57【问题描述】:使用R,如果是数字,如何删除逗号,如果是字母,如何用空格替换逗号?:Company|Sales|-------------------------go,go,... 查看详情

从字符串中删除非字母数字字符(包括 ß、Ê 等)

】从字符串中删除非字母数字字符(包括ß、Ê等)【英文标题】:Removenon-alphanumericcharacters(includingß,Ê,etc.)fromastring【发布时间】:2011-11-0810:53:24【问题描述】:是否有一种简单的方法可以从PHP中的字符串中删除所有非字母数字... 查看详情

如何在 R 中使用 gsub 从字符串中删除非数字字符?

】如何在R中使用gsub从字符串中删除非数字字符?【英文标题】:HowcanIremovenon-numericcharactersfromstringsusinggsubinR?【发布时间】:2019-03-1408:08:42【问题描述】:我使用R中的gsub函数来删除数字中不需要的字符。所以我应该从字符串中... 查看详情

查询删除所有非数字但只保留最后一个句点/点

...varchar2过滤到number,这样就可以去掉所有非数字,只留下字符串中的最后一个句点,这样"about1,000.00"return1000.00or1000"3,000,000. 查看详情

PHP从数字字符串中删除逗号

】PHP从数字字符串中删除逗号【英文标题】:PHPremovecommasfromnumericstrings【发布时间】:2012-03-0905:51:31【问题描述】:在PHP中,我有一个全是字符串的变量数组。存储的一些值是带逗号的数字字符串。我需要什么:一种从字符串中... 查看详情

java示例代码_从数字字符串结果中删除逗号

java示例代码_从数字字符串结果中删除逗号 查看详情

从Python中的字符串中删除所有非数字字符

】从Python中的字符串中删除所有非数字字符【英文标题】:Removingallnon-numericcharactersfromstringinPython【发布时间】:2010-11-1723:24:47【问题描述】:我们如何从Python中的字符串中删除所有非数字字符?【问题讨论】:可能重复:***.com... 查看详情

使用 sed 删除非字母数字字符

】使用sed删除非字母数字字符【英文标题】:Removingnon-alphanumericcharacterswithsed【发布时间】:2013-11-2905:06:17【问题描述】:我正在尝试验证一些输入以删除一组字符。只允许使用字母数字字符加号、句点、下划线、连字符。我已... 查看详情

从字符串中删除所有初始数字,直到达到非数字字符

】从字符串中删除所有初始数字,直到达到非数字字符【英文标题】:Removeallinitialnumbersfromstringuntilnon-numericalcharacterisreached【发布时间】:2017-01-1314:52:58【问题描述】:我正在尝试删除字符串的第一个数字(删除所有数字,直到... 查看详情

正则表达式删除所有(非数字或句点)

】正则表达式删除所有(非数字或句点)【英文标题】:Regextoremoveall(nonnumericORperiod)【发布时间】:2011-03-0414:24:52【问题描述】:我需要将“joe($3,004.50)”之类的文本过滤到3004.50,但在正则表达式方面表现不佳,找不到合适的解... 查看详情

从 lua 字符串中删除所有非字母数字字符

】从lua字符串中删除所有非字母数字字符【英文标题】:removeallnon-alphanumericcharactersfromluastring【发布时间】:2013-04-3014:37:37【问题描述】:我检查字符串中的非字母数字字符。if(str:match("%W"))then--makestralpha-numericend如何使用lua从字... 查看详情

从 SQL Server 中的 VARCHAR 中删除非数字字符的最快方法

】从SQLServer中的VARCHAR中删除非数字字符的最快方法【英文标题】:Fastestwaytoremovenon-numericcharactersfromaVARCHARinSQLServer【发布时间】:2010-09-1111:54:18【问题描述】:我正在编写一个导入实用程序,它使用电话号码作为导入中的唯一键... 查看详情

如何从字符串中删除所有非希伯来字符并将单词放入数组中?

】如何从字符串中删除所有非希伯来字符并将单词放入数组中?【英文标题】:HowtoremoveallnonHebrewcharactersfromastringandputthewordsintoanarray?【发布时间】:2020-08-1011:32:28【问题描述】:我想从字符串中删除所有非希伯来语字符(包括... 查看详情

从字符串 Typescript 中删除非英语 [重复]

】从字符串Typescript中删除非英语[重复]【英文标题】:Removenon-englishfromastringTypescript[duplicate]【发布时间】:2019-03-1311:51:36【问题描述】:嘿,我正在尝试使用正则表达式从字符串中删除数字。到目前为止,这是我的代码:str.repl... 查看详情

快速从字符串中删除所有非数字字符

】快速从字符串中删除所有非数字字符【英文标题】:Removeallnon-numericcharactersfromastringinswift【发布时间】:2016-04-1309:28:27【问题描述】:我需要解析一些未知数据,这些数据应该只是一个数值,但可能包含空格或其他非字母数字... 查看详情

从字符串中删除非字母数字字符

Usefulforstrippingoutbackslashes,hyphensandotherpunctuationvarr:RegExp=newRegExp(/[^a-zA-Z0-9]+/g);yourString=yourString.replace(r,""); 查看详情

试图从字符串中获取所有数值和句点

】试图从字符串中获取所有数值和句点【英文标题】:Tryingtogetallnumericalvaluesandperiodsformstring【发布时间】:2019-04-1815:18:48【问题描述】:我正在尝试使用SELECT语句检索数据,该语句由不同的人输入,以克为单位。由于似乎没有... 查看详情

正则表达式:允许逗号分隔的字符串,包括字符和非字符

】正则表达式:允许逗号分隔的字符串,包括字符和非字符【英文标题】:Regex:allowcomma-separatedstrings,includingcharactersandnon-characters【发布时间】:2020-12-2506:29:05【问题描述】:我发现很难完成这个正则表达式。以下正则表达式检... 查看详情