Php 正则表达式,仅允许字符串中包含整数和逗号
有人知道字符串只允许整数和逗号的preg_替换是什么吗?我想去掉所有空格、字母、符号等,所以剩下的只是数字和逗号,但字符串中没有任何前导或训练逗号。(示例:5,7,12) 这就是我现在使用的,它只在逗号前后去掉空格,但我认为它允许其他任何东西Php 正则表达式,仅允许字符串中包含整数和逗号,php,regex,preg-replace,Php,Regex,Preg Replace,有人知道字符串只允许整数和逗号的preg_替换是什么吗?我想去掉所有空格、字母、符号等,所以剩下的只是数字和逗号,但字符串中没有任何前导或训练逗号。(示例:5,7,12) 这就是我现在使用的,它只在逗号前后去掉空格,但我认为它允许其他任何东西 $str = trim(preg_replace('|\\s*(?:' . preg_quote($delimiter) . ')\\s*|', $delimiter, $str)); 这应该满足您的需要: $str = preg_replace(
$str = trim(preg_replace('|\\s*(?:' . preg_quote($delimiter) . ')\\s*|', $delimiter, $str));
这应该满足您的需要:
$str = preg_replace(
array(
'/[^\d,]/', // Matches anything that's not a comma or number.
'/(?<=,),+/', // Matches consecutive commas.
'/^,+/', // Matches leading commas.
'/,+$/' // Matches trailing commas.
),
'', // Remove all matched substrings.
$str
);
$str=preg\u replace(
排列(
“/[^\d,]/',//匹配任何不是逗号或数字的内容。
“/(?以下是你问题的答案:
//drop all characters except digits and commas
preg_match_all('/[\\d,]/', $subject, $result, PREG_PATTERN_ORDER);
$result = implode('', $result[0]);
//strip the empty or trailing commas
if( preg_match('/^,*(\\d.*?\\d),*$/', $result, $regs) ){
$result = $regs[1];
}
但是您可能想改用这个函数
听起来像是我曾经写过的函数。请参阅:
我知道这并不是你想要的,但每次我尝试它时,它都会返回格式正确的字符串
$string = ", 3,,,,, , 2 4 , , 3 , 2 4 ,,,,,";
//remove spaces
$string = preg_replace("[\s]","",$string);
// remove commas
$array = array_filter(explode(",",$string));
// reassemble
$string = implode(",",$array);
print_r($string);
返回3,24,3,24
这是我在大家的帮助下提出的一个函数。它适用于逗号,但不适用于任何其他分隔符
if (!function_exists('explode_trim_all')) {
function explode_trim_all($str, $delimiter = ',') {
if ( is_string($delimiter) ) {
$str = preg_replace(
array(
'/[^\d'.$delimiter.']/', // Matches anything that's not a delimiter or number.
'/(?<='.$delimiter.')'.$delimiter.'+/', // Matches consecutive delimiters.
'/^'.$delimiter.'+/', // Matches leading delimiters.
'/'.$delimiter.'+$/' // Matches trailing delimiters.
),
'', // Remove all matched substrings.
$str
);
return explode($delimiter, $str);
}
return $str;
}
}
如果(!function_存在('explode_trim_all')){
函数explode\u trim\u all($str,$delimiter=',')){
if(is_字符串($delimiter)){
$str=预更换(
排列(
“/[^\d.”$delimiter.]/',//匹配任何非分隔符或数字的内容。
'/(?PS。我强烈推荐快速创建和测试正则表达式模式。它甚至可以为您编写PHP代码。您可以通过将异常包装在try-catch块中来抑制异常。如果它不去除除整数和逗号以外的所有内容,那么这将无法满足我的需要。但我非常感谢您的响应。你们太棒了这里!;)这个函数上面的代码怎么样?除了数字和逗号之外,它去掉了所有的字符。你能提供一些预期输入和输出的示例吗?:-)是的,先生,我能。我知道这很牵强,但有些人会试图克服这个问题。他们会尝试类似的方法,例如:,(3,,,,,2喂?4,发生什么事了?,,3,2!@$%^4,,,,,),无括号。最后应该是3,24。可能会有更多的数字是设置,但这是想法的要点。我不知道如何在这里的评论框中显示它。我需要它只显示像3,24,56,75,5等。如果听起来很混乱,很抱歉。这是完美的,除了它不会删除空格和ot后的匹配数字如果你在最后一行的意思是这样的话,她的东西会被移除。(例如:,3,,,,,2 4,,,3,2 4,,,,,,)返回3,24,3,24)我想有一个更好的方法来做这件事,但我似乎什么都做不了。我可以使用array_unique来捕捉复制,所以这应该可以完成工作。非常感谢你的快速回答。布鲁克,第二个逗号(括号后+之前)在这行中做什么?“/(?@Rob(?您的第一个代码适用于逗号或数字以外的任何代码。但是这些代码不适用,因为2 4是一个不分开的数字。因此,它应该是:3,24,3,24。除逗号(或您选择的任何分隔符)以外的任何代码)和数字。我已经更改了代码,它现在将删除空格并对数字进行分组,同时仍保持所需的分隔。如果要使其更具动态性,只需使用您选择的变量或分隔符替换“
”、“
”。如果您更改了“”/(?)?
if (!function_exists('explode_trim_all')) {
function explode_trim_all($str, $delimiter = ',') {
if ( is_string($delimiter) ) {
$str = preg_replace(
array(
'/[^\d'.$delimiter.']/', // Matches anything that's not a delimiter or number.
'/(?<='.$delimiter.')'.$delimiter.'+/', // Matches consecutive delimiters.
'/^'.$delimiter.'+/', // Matches leading delimiters.
'/'.$delimiter.'+$/' // Matches trailing delimiters.
),
'', // Remove all matched substrings.
$str
);
return explode($delimiter, $str);
}
return $str;
}
}