//////////////////////////////////////////////////////////////////////////////// // // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to You under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //////////////////////////////////////////////////////////////////////////////// package mx.formatters { import mx.managers.ISystemManager; import mx.managers.SystemManager; [ResourceBundle("formatters")] /** * The ZipCodeFormatter class formats a valid number * into one of the following formats, based on a * user-supplied formatString property. * * * *

A six-digit number must be supplied for a six-digit mask. * If you use a five-digit or a nine-digit mask, you can use * either a five-digit or a nine-digit number for formatting.

* *

If an error occurs, an empty String is returned and a String that * describes the error is saved to the error property. * The error property can have one of the following values:

* * * * @mxml * *

The <mx:ZipCodeFormatter> tag * inherits all of the tag attributes of its superclass, * and adds the following tag attributes:

* *
 *  <mx:ZipCodeFormatter
 *    formatString="#####|#####-####|### ###"
 *  />
 *  
* * @includeExample examples/ZipCodeFormatterExample.mxml * * @see mx.formatters.SwitchSymbolFormatter * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public class ZipCodeFormatter extends Formatter { include "../core/Version.as"; //-------------------------------------------------------------------------- // // Class constants // //-------------------------------------------------------------------------- /** * @private */ private static const VALID_LENGTHS:String = "9,5,6"; //-------------------------------------------------------------------------- // // Constructor // //-------------------------------------------------------------------------- /** * Constructor. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function ZipCodeFormatter() { super(); } //-------------------------------------------------------------------------- // // Properties // //-------------------------------------------------------------------------- //---------------------------------- // formatString //---------------------------------- /** * @private * Storage for the formatString property. */ private var _formatString:String; /** * @private */ private var formatStringOverride:String; [Inspectable(category="General", defaultValue="null")] /** * The mask pattern. * Possible values are "#####-####", * "##### ####", "#####", * "###-###" and "### ###". * * @default "#####" * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function get formatString():String { return _formatString; } /** * @private */ public function set formatString(value:String):void { formatStringOverride = value; _formatString = value != null ? value : resourceManager.getString( "formatters", "zipCodeFormat"); } //-------------------------------------------------------------------------- // // Overidden methods // //-------------------------------------------------------------------------- /** * @private */ override protected function resourcesChanged():void { super.resourcesChanged(); formatString = formatStringOverride; } /** * Formats the String by using the specified format. * If the value cannot be formatted, return an empty String * and write a description of the error to the error property. * * @param value Value to format. * * @return Formatted String. Empty if an error occurs. A description * of the error condition is written to the error property. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ override public function format(value:Object):String { // Reset any previous errors. if (error) error = null; // -- lengths -- var fStrLen:int; var uStrLen:int = String(value).length; if (VALID_LENGTHS.indexOf("" + uStrLen) == -1) { error = defaultInvalidValueError; return ""; } if (formatString == "#####-####" || formatString == "##### ####") { if (uStrLen != 5 && uStrLen != 9) { error = defaultInvalidValueError; return ""; } fStrLen = 9; } else if (formatString == "#####") { if (uStrLen != 5 && uStrLen != 9) { error = defaultInvalidValueError; return ""; } fStrLen = 5; } else if (formatString == "### ###" || formatString == "###-###") { if (uStrLen != 6) { error = defaultInvalidValueError; return ""; } fStrLen = 6; } else { error = defaultInvalidFormatError; return ""; } if (fStrLen == 6 && uStrLen != 6) { error = defaultInvalidValueError; return ""; } // -- value -- if (fStrLen == 6) { for (var i:int = 0; i < uStrLen; i++) { if ((value.charCodeAt(i) < 64 || value.charCodeAt(i) > 90) && (value.charCodeAt(i) < 48 || value.charCodeAt(i) > 57)) { error = defaultInvalidValueError; return ""; } } } else { if (value === null || isNaN(Number(value))) { error = defaultInvalidValueError; return ""; } } // --format-- if (fStrLen == 9 && uStrLen == 5) value = String(value).concat("0000"); if (fStrLen == 5 && uStrLen == 9) value = value.substr(0, 5); var dataFormatter:SwitchSymbolFormatter = new SwitchSymbolFormatter(); return dataFormatter.formatValue(formatString, value); } } }