Php 在字符串上添加空格,但从右向左计数
看到一些答案,比如:使用 但在这种情况下,我需要从右到左计数字符 例如,将电话号码格式化为用户友好的123-123-1234。问题是,有时用户可能会提交一个代码区,如果我通常从左到右开始,我可以得到这样的结果:012-312-3123-4,所以我考虑从右到左开始 有什么想法吗?一个具有前瞻性的正则表达式,在匹配的位置和字符串结尾之间有一组或多组4个字符,应该可以为您这样做Php 在字符串上添加空格,但从右向左计数,php,string,split,Php,String,Split,看到一些答案,比如:使用 但在这种情况下,我需要从右到左计数字符 例如,将电话号码格式化为用户友好的123-123-1234。问题是,有时用户可能会提交一个代码区,如果我通常从左到右开始,我可以得到这样的结果:012-312-3123-4,所以我考虑从右到左开始 有什么想法吗?一个具有前瞻性的正则表达式,在匹配的位置和字符串结尾之间有一组或多组4个字符,应该可以为您这样做 echo preg_replace("/(?=(.{4})+$)/", "-", "1234567890"); // 12-
echo preg_replace("/(?=(.{4})+$)/", "-", "1234567890");
// 12-3456-7890
您需要处理具有4个字符的精确倍数的字符串,这些字符串的开头将以连字符结尾。您可以向正则表达式中添加一个lookbehind断言,也可以在之后删除连字符,这样更易于阅读
echo preg_replace("/(?=(.{4})+$)/", "-", "123456789012");
// -1234-5678-9012
echo preg_replace("/(?<=.)(?=(.{4})+$)/", "-", "123456789012");
// 1234-5678-9012
echo ltrim(preg_replace("/(?=(.{4})+$)/", "-", "123456789012"), "-");
// 1234-5678-9012
echo preg_替换(“/(?=({4})+$)/”、“-”、“123456789012”);
// -1234-5678-9012
echo preg_replace(“/(?一个具有前瞻性的正则表达式,在匹配的位置和字符串结尾之间有一组或多组4个字符,应该为您执行此操作
echo preg_replace("/(?=(.{4})+$)/", "-", "1234567890");
// 12-3456-7890
您需要处理精确倍数为4个字符的字符串,这些字符串的开头将以连字符结尾。您可以在正则表达式中添加lookbehind断言,也可以在之后删除连字符,这样更易于阅读
echo preg_replace("/(?=(.{4})+$)/", "-", "123456789012");
// -1234-5678-9012
echo preg_replace("/(?<=.)(?=(.{4})+$)/", "-", "123456789012");
// 1234-5678-9012
echo ltrim(preg_replace("/(?=(.{4})+$)/", "-", "123456789012"), "-");
// 1234-5678-9012
echo preg_替换(“/(?=({4})+$)/”、“-”、“123456789012”);
// -1234-5678-9012
echo preg_replace(“/(?此操作有效
function myFormat($s, $len, $delimiter = "-")
{
$techChar = " ";
$newLen = ceil(strlen($s) / $len) * $len;
$s = str_pad($s, $newLen, $techChar, STR_PAD_LEFT);
$s = wordwrap($s, $len, $delimiter, true);
$s = ltrim($s, $techChar);
return $s;
}
这很有效
function myFormat($s, $len, $delimiter = "-")
{
$techChar = " ";
$newLen = ceil(strlen($s) / $len) * $len;
$s = str_pad($s, $newLen, $techChar, STR_PAD_LEFT);
$s = wordwrap($s, $len, $delimiter, true);
$s = ltrim($s, $techChar);
return $s;
}
使用一个正则表达式,在开头有一个可选匹配项,并在结尾锚定它。使用一个正则表达式,在开头有一个可选匹配项,并在结尾锚定它。通过再次阅读您的问题,我意识到,尽管它说您希望在从右向左计数的每四个字符后添加一个空格,但您的示例123-123-1234不会这样做。如果我误解了要求,请告诉我(并编辑问题)。让我测试选项,然后报告结果。我可以使用空格或字符。:o)哼。现在我已经尝试了您的解决方案并使用它,我正在尝试对构造函数进行分组。例如,“preg_replace(/(?=(.3})(.4})+$/”、“-”、“123456789012”)来探索间距。我应该编辑这个问题还是发布一个新的问题?你差不多到了。要分割除最后一组四个字符之外的每三个字符,你可以做preg_-replace(“/”(?哦,太好了!正则表达式让你的大脑逻辑被挤压了很多!我必须说一句极客的评论:“迷人的”:o)。再次感谢。再次阅读您的问题后,我意识到,尽管它说您希望在从右向左计数的每四个字符后添加一个空格,但您的示例123-123-1234并不能做到这一点。请让我知道(并编辑问题)如果我误解了要求。让我测试选项,然后报告结果。我可以使用空格或字符。:o)哼哼。现在我已经尝试了您的解决方案并使用它,我正在尝试对构造函数进行分组。例如,“preg_replace(“/(?=(.3})(.4})+$)/”,“-”,“123456789012”)”探索间距。我应该编辑问题还是发布一个新的问题?你就快到了。要分割除最后一组四个字符之外的每三个字符,你可以做preg_-replace(“/”)(?哦,太好了!正则表达式让你大量挤压大脑的逻辑!我必须说一句极客的评论:“迷人”:o)让我看看,做一些测试,谢谢:o)让我看看,做一些测试,谢谢:o)