• 转载:NumberInput.as 类


    package
    {
        import flashx.textLayout.operations.InsertTextOperation;
        
        import spark.components.TextInput;
        import spark.events.TextOperationEvent;
        
        [Exclude(name="restrict", kind="property")]
        
        public class NumberInput extends TextInput
        {
            public function NumberInput()
            {
                updateRegex();
            }
           
            //regex pattern
            private var regex:RegExp;
           
            private var _allowNegative:Boolean = true;
            /**
             * Specifies whether negative numbers are permitted.
             * Valid values are true or false.
             *
             * @default true
             
    */
            public function set allowNegative(value:Boolean):void
            {
                _allowNegative = value;
                updateRegex();
            }
           
            private var _fractionalDigits:int = 0;
            /**
             * The maximum number of digits that can appear after the decimal
             * separator.
             *
             *
             
             The default value is 0
             
    */
            public function set fractionalDigits(value:int):void
            {
                _fractionalDigits = value;
                updateRegex();
            }
           
            /**
             *  @private
             
    */
            override public function set restrict(value:String):void
            {
                throw(new Error("You are not allowed to change the restrict property of this class.  It is read-only."));
            }
           
            override protected function childrenCreated():void
            {
                super.childrenCreated();
               
                //listen for the text change event
                addEventListener(TextOperationEvent.CHANGING, onTextChange);
            }
           
            public function onTextChange(event:TextOperationEvent):void
            {
                if (regex && event.operation is InsertTextOperation)
                {
                    // What will be the text if this input is allowed to happen
                    var textToBe:String = "";
                    // Check selection
                    if (selectionActivePosition > 0)
                    {
                        textToBe += text.substr(0, selectionActivePosition)
                    }
                    //append the newly entered text with the existing text
                    textToBe += InsertTextOperation(event.operation).text;
                    if (selectionAnchorPosition > 0)
                    {
                        textToBe += text.substr(selectionAnchorPosition, text.length - selectionAnchorPosition);
                    }
                    var match:Object = regex.exec(textToBe);
                    if (!match || match[0] != textToBe)
                    {
                        // The textToBe didn't match the expression... stop the event
                        event.preventDefault();
                    }
                    //special condition checking to prevent multiple dots
                    var firstDotIndex:int = textToBe.indexOf(".");
                    if( firstDotIndex != -1)
                    {
                        var lastDotIndex:int = textToBe.lastIndexOf(".");
                        if(lastDotIndex != -1 && lastDotIndex != firstDotIndex)
                            event.preventDefault();
                    }
                }
            }
           
            private function updateRegex():void
            {
                var regexString:String = "\\d{0,50}";
                if(_allowNegative)
                    regexString = "^\\-?" + regexString;
                else
                    regexString = "^" + regexString;
                if(_fractionalDigits > 0 )
                    regexString += "\\.?\\d{0," + _fractionalDigits.toString() + "}$";
                else
                    regexString += "$";
                regex = new RegExp(regexString);
            }
        }
    }
  • 相关阅读:
    HtmlAgilityPack
    随笔-20150513
    过滤掉html 标签
    json转换
    第28月第3天 c语言读写文件
    第27月第28天 iOS bundle
    第27月第27天 https
    第27月第25天 clang -rewrite-objc main.m
    第27月第24天 git pull fetch
    第27月第18天 epoll lt et
  • 原文地址:https://www.cnblogs.com/dzone/p/2704431.html
Copyright © 2020-2023  润新知