Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在字符串上添加空格,但从右向左计数_Php_String_Split - Fatal编程技术网

Php 在字符串上添加空格,但从右向左计数

Php 在字符串上添加空格,但从右向左计数,php,string,split,Php,String,Split,看到一些答案,比如:使用 但在这种情况下,我需要从右到左计数字符 例如,将电话号码格式化为用户友好的123-123-1234。问题是,有时用户可能会提交一个代码区,如果我通常从左到右开始,我可以得到这样的结果:012-312-3123-4,所以我考虑从右到左开始 有什么想法吗?一个具有前瞻性的正则表达式,在匹配的位置和字符串结尾之间有一组或多组4个字符,应该可以为您这样做 echo preg_replace("/(?=(.{4})+$)/", "-", "1234567890"); // 12-

看到一些答案,比如:使用

但在这种情况下,我需要从右到左计数字符

例如,将电话号码格式化为用户友好的123-123-1234。问题是,有时用户可能会提交一个代码区,如果我通常从左到右开始,我可以得到这样的结果:012-312-3123-4,所以我考虑从右到左开始

有什么想法吗?

一个具有前瞻性的正则表达式,在匹配的位置和字符串结尾之间有一组或多组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(“/(?一个具有前瞻性的正则表达式,在匹配的位置和字符串结尾之间有一组或多组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)