-
05-09-2019 - |
题
我需要能够做的是格式数据中的变量,像这样:
format: xxx-xxx variable: 123456 output: 123-456
问题是我需要能够改变格式,所以静态的解决方案是行不通的。我也喜欢能够改变可变大小,例如:
format: xxx-xxx variable: 1234 output: 1-234
所有的想法,欢迎!感谢您的帮助!
注意:所有的变量的将是数字
修改强>我应该已经在其不会总是分组的3格式清晰,并且其可以具有更多然后“ - ”作为一个符号,基团将是不恒定的1-22 -333-4444它只会在1-5分组
解决方案
最好的办法是的preg_replace 。
正则表达式需要一段时间来适应,但是这可能是你最好的选择...
编辑:
//initial parsing
$val = preg_replace(
'/(\d*?)(\d{1,2}?)(\d{1,3}?)(\d{1,4})$/',
'${1}-${2}-$[3}-${4}',
$inputString
);
//nuke leading dashes
$val - preg_replace('^\-+', '', $val);
的关键是让每一个组,除了右击-最多一个非贪婪,允许的右侧面向模式匹配。
其他提示
如果要格式化的输入始终是一个整数,你可以尝试number_format和格式作为货币(千等。) 这里是取任何字符串并把它变成你想要的格式的溶液:
$split_position = 3;
$my_string = '';
echo strrev(implode('-',(str_split(strrev($my_string),$split_position))));
input: 1234; output: 1-234
input: abcdefab; output: ab-cde-fab
input: 1234567 output: 1-234-567
您可以执行策略模式并和有是在运行交换新的格式化类时间。如果你以前没有见过,但与可维护性它确实有助于并且允许您与setFormatter()随时切换格式看起来比较复杂。
class StyleOne_Formatter implements Formatter
{
public function format($text)
{
return substr($text,0,3).'-'.substr($text,3);
}
}
class StyleTwo_Formatter implements Formatter
{
public function format($text)
{
return substr($text,0,1).'-'.substr($text,1);
}
}
然后你将有这将是像这样的格式化类:
class NumberFormatter implements Formatter
{
protected $_formatter = null;
public function setFormatter(Formatter $formatter)
{
$this->_formatter = $formatter;
}
public function format($text)
{
return $this->_formatter->format($text);
}
}
然后,你可以使用这样的:
$text = "12345678910";
$formatter = new NumberFormatter();
$formatter->setFormatter(new StyleOne_Formatter());
print $formatter->format($text);
// Outputs 123-45678910
$formatter->setFormatter(new StyleTwo_Formatter());
print $formatter->format($text);
// Outputs 1-2345678910
不隶属于 StackOverflow