是否可以使用Kleene运算符(Kleene Star)作为格式化程序?
我想使用phoneFormatter,它在第5个数字之后加一个减号,然后它应该可以有一个可变数量的数字。
例如:0172-555666999,0160-44552等
这就是我的开始,但我不知道在最后一个哈希之后属于哪个角色(它不是星星,我已经尝试过了;-)):
<fx:Declarations>
<mx:PhoneFormatter id="mPhoneFormat"
formatString="####-#"/>
</fx:Declarations>
答案 0 :(得分:0)
默认PhoneFormatter
要求输入字符串与格式字符串具有相同的字符数。它们不支持正则表达式模式(如*匹配元素零次或多次)。
但是,制作自己的格式化程序非常容易。为此,我扩展了PhoneFormatter
类并覆盖了其format()
方法。我复制并粘贴了原始format()
方法并进行了以下修改:
这可能无法处理您的所有用例,但根据您的需要修改它应该非常简单。
package
{
import mx.formatters.PhoneFormatter;
import mx.formatters.SwitchSymbolFormatter;
public class CustomPhoneNumberFormatter extends PhoneFormatter
{
public function CustomPhoneNumberFormatter()
{
super();
}
override public function format(value:Object):String
{
// Reset any previous errors.
if (error)
error = null;
// --value--
if (!value || String(value).length == 0 || isNaN(Number(value)))
{
error = defaultInvalidValueError;
return "";
}
// --length--
var fStrLen:int = 0;
var letter:String;
var n:int;
var i:int;
n = formatString.length;
for (i = 0; i < n; i++)
{
letter = formatString.charAt(i);
if (letter == "#")
{
fStrLen++;
}
else if (validPatternChars.indexOf(letter) == -1)
{
error = defaultInvalidFormatError;
return "";
}
}
// if (String(value).length != fStrLen)
// {
// error = defaultInvalidValueError;
// return "";
// }
// --format--
var fStr:String = formatString;
if (fStrLen == 7 && areaCode != -1)
{
var aCodeLen:int = 0;
n = areaCodeFormat.length;
for (i = 0; i < n; i++)
{
if (areaCodeFormat.charAt(i) == "#")
aCodeLen++;
}
if (aCodeLen == 3 && String(areaCode).length == 3)
{
fStr = String(areaCodeFormat).concat(fStr);
value = String(areaCode).concat(value);
}
}
var dataFormatter:SwitchSymbolFormatter = new SwitchSymbolFormatter();
var source:String = String(value);
var returnValue:String = dataFormatter.formatValue(fStr, value);
if (source.length > returnValue.length)
{
returnValue = returnValue + source.substr(returnValue.length-1);
}
return returnValue;
}
}
}