关键词:
【中文标题】从字符串中删除非数字字符(不包括句点和逗号)(即删除除数字、逗号和句点之外的所有字符)【英文标题】: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【问题描述】:我发现很难完成这个正则表达式。以下正则表达式检... 查看详情