Robotlegs 2 (beta) + Facebook App

Hola, os voy a mostrar lo fácil que es crear una app Facebook utilizando una extensión que he realizado para Robotlegs 2.
Es importante, antes de comenzar tener claro como funciona Robotlegs 1 o 2 y cómo configurar una aplicación de Facebook. Con esta extensión seréis capaces de realizar las siguientes funciones básicas que cualquier aplicación Facebook necesita:

  • Inicial la API de Facebook.
  • Realizar el login y logout.
  • Extraer la lista de amigos.
  • Realizar un post en el muro.
  • Compartir un link.

No me centraré en cómo configurar una aplicación de Facebook ya que es tema de otro tutorial, iré directamente al grano. Para más información sobre configurar aplicaciones en Facebook podéis consultar la ayuda que se encuentra aquí.


Una vez que tengáis configurada la App nos interesa tener el App ID/API Key que nos proporciona Facebook, similar a este: 336937833651393.
Ahora, realizamos los siguientes pasos:

  1. Creamos el proyecto en IntelliJ IDEA/FDT/Flex/FlashDevelop o el IDE que prefieras.
  2. Importamos el código de Robotlegs 2.
  3. Descargamos e importamos la librería Facebook Actionscript API.
  4. Importamos el código de Robotlegs-Facebook-Extension.
  5. En este tutorial he utilizado MinimalComps para crear una UI básica.

OK, ahora que ya tenemos todas las librerías y el código importado, creamos la classe donde crearemos nuestra aplicación, yo la he llamado “Application.as”:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Application extends Sprite {
    private var _context:IContext;

    public function Application() {

        stage.align = StageAlign.TOP_LEFT;
        stage.scaleMode = StageScaleMode.NO_SCALE;

        _context = new Context()
                .extend(MVCSBundle)
                .extend(FacebookExtension);
        _context.configure(FacebookAppConfig, this);
    }
}

Vale, vamos viendo algunas lineas importantes:

1
_context = new Context()

Anteriormente en Robotlegs debíamos extender la classe Context para crear nuestro contexto. En Robotlegs 2 creamos directamente una instancia de este y lo configuramos.

Primera novedad en Robotlegs 2, los Bundles, estos nos permiten configurar una aplicación Robotlegs con un paquete de extensiones. En Robotlegs 1.5 podíamos utilizar CommandMap o SignalCommandMap, generalmente extendiendo el contexto, en Robotlegs 2 es bastante más fácil, más paquetizado.

En nuestro caso, empezamos con algo sencillo, extendemos el contexto con MVCBundle:

1
.extend(MVCSBundle)

Es un set de extensiones similares al paquete básico que ofrecía Robotlegs 1.5 (CommandMap, MediatorMap, EventCommandMap, EventDispatcher, etc.)

Luego agregamos la extensión para realizar una app para Facebook:

1
.extend(FacebookExtension);

Ok, aquí comenzamos con nuestra app Facebook. Le indicamos a Robotlegs que queremos utilizar la extensión “FacebookExtension”. Esta nos configurará una serie de comandos, servicios, modelos de base que servirán más tarde para realizar diferentes operaciones.

Otra novedad de Robotlegs 2, “configure”, aquí, podemos pasar como parametro una classe, el segundo parámetro será el contextView.

1
_context.configure(FacebookAppConfig, this);

Lo que hará es configurar de algún modo, las extensiones o la aplicación.
En mi caso, esta classe contiene:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class FacebookAppConfig {
    [Inject]
    public var eventDispatcher:IEventDispatcher;
    [Inject]
    public var mediatorMap:IMediatorMap;
    [Inject]
    public var service:FacebookInitAPIService;
    [Inject]
    public var contextView:DisplayObjectContainer;

    [PostConstruct]
    public function init():void {

        service.api_key = 'YOUR_API_KEY_HERE';

        mediatorMap.map(MainView).toMediator(MainViewMediator);

        var main:MainView = new MainView();
        contextView.addChild(main);

        mediatorMap.mediate(main);

        eventDispatcher.dispatchEvent(new FacebookEvent(FacebookEvent.API_INIT_REQUEST));
    }
}

Aquí tenemos algo importante:

1
service.api_key = 'YOUR_API_KEY_HERE';

Con esto, le indicamos al servicio que iniciará la API la App ID/API Key que tiene que utilizar con esta aplicación. Puedes conseguir una creando una App en Facebook en: https://developers.facebook.com/apps

Tenemos el contexto construído, lo hemos configurado, ahora agregamos una vista donde se mostrarán algunos botones (login, logout, etc) y otra información relacionada con el usuario.

Vale, ahora cómo hacemos para:
Iniciar la conexión con la api de Facebook:

1
eventDispatcher.dispatchEvent(new FacebookEvent(FacebookEvent.API_INIT_REQUEST));

Esto enviará un evento al contexto y se ejecutará un comando que llamará a un servicio para iniciar la API, es aquí donde se envia el App ID/API Key y se puede recibir/enviar información a Facebook. La primera vez, pedirá los permisos necesarios para instalar la aplicación. Ahora podemos comenzar a utilizar las otras funciones.

De momento, haré una lista de cómo realizar cada función, en otro post explicaré cada una con más detalle:
Realizar el login:

1
dispatch(new FacebookEvent(FacebookEvent.USER_LOGIN_REQUEST));

Realizar el logout:

1
dispatch(new FacebookEvent(FacebookEvent.USER_LOGOUT_REQUEST));

Obtener la información básica del usuario:

1
dispatch(new FacebookEvent(FacebookEvent.USER_GET_BASIC_DATA));

Recuperar la lista de amigos:

1
dispatch(new FacebookEvent(FacebookEvent.USER_GET_FRIENDS_DATA));

Compartir un link:

1
2
var data : Object = {url:'http://blog.singuerinc.net/?p=217', title:'Robotlegs-Facebook-Extension for Robotlegs 2'};
dispatch(new FacebookEvent(FacebookEvent.SHARER, data));

Crear un post en el muro:

1
dispatch(new FacebookEvent(FacebookEvent.USER_POST_TO_FEED, data));
Posted in ActionScript 3, robotlegs | 2 Comments

Validar un teléfono móvil de Italia con Actionscript
Validazione cellulare Italia

Validazione Cellulare Italia
La mayoria de los sites que hago se traducen a algún otro idioma, en este caso lo hemos traducido a italiano. Pero la traducción no sólo se queda en los textos, cuando se tienen formularios y hay que validar formularios la cosa se complica un poco más.
Validar un teléfono de Italia es bastante más complicado que uno de España, ya que cada compañia tiene asignado un rango de números y no son correlativos. Para complicarme aún más la existencia, me pareció que sería útil que tuviera la capacidad de decirnos a qué compañia corresponde.
Aquí la Class:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package net.singuerinc.labs.utils.validators {
   
    /**
     * @author nahuel.scotti / blog.singuerinc.net
     */

    public class ItalyPhoneValidator implements IPhoneValidator {

        private var operators:Array = ['TIM', 'Vodafone', 'Wind', 'Tre', 'TrenItalia'];

        private var _phoneNumber:String;
        private var _isValid:Boolean;
        private var _operatorIndex:int;
        private var _isFixed:Boolean;
        private var _isMobile:Boolean;

        private const TIM_REx:RegExp = /^((0039){0,1})3{1}(((?>3)[013456789]{1})|((?>6)[0368]{1}))[0-9]{7}$/;
        private const VODAFONE_REx:RegExp = /^((0039){0,1})3{1}(((?>4)[02356789]{1}))[0-9]{7}$/;
        private const WIND_REx:RegExp = /^((0039){0,1})3{1}(((?>2)[03789]{1})|((?>8)[0389]{1}))[0-9]{7}$/;
        private const TRE_REx:RegExp = /^((0039){0,1})3{1}9{1}[0-3]{1}[0-9]{7}$/;
        private const TRENITALIA_REx:RegExp = /^((0039){0,1})313[0-9]{7}$/;

        private var __rx:Array = [TIM_REx, VODAFONE_REx, WIND_REx, TRE_REx, TRENITALIA_REx];

        public function ItalyPhoneValidator(phoneNumber:String) {
            _phoneNumber = phoneNumber;
            _phoneNumber = _phoneNumber.replace(/^\+/, '00');
            _phoneNumber = _phoneNumber.replace(/[^0-9]/g, '');
            _isValid = validate(_phoneNumber);
        }

        public function isValid():Boolean {
            return _isValid;
        }

        public function get phoneNumber():String {
            return _phoneNumber;
        }

        public function get operatorName():String {
            return operators[_operatorIndex];
        }

        private function validate(value:String):Boolean {

            var str:String = value.toString();
            if (str.length < 10) {
                _operatorIndex = -1;
                return false;
            }

            var l:uint = __rx.length;
            for (var i:uint = 0; i < l; i++) {
                var success:Boolean = __rx[i].test(str);
                if (success) {
                    _isMobile = true;
                    _operatorIndex = i;
                    return true;
                }
            }

            _isMobile = false;
            _operatorIndex = -1;
            return false;
        }

        public function isFixed():Boolean {
            return _isFixed;
        }

        public function isMobile():Boolean {
            return _isMobile;
        }
    }
}

Cómo usarlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var val1:ItalyPhoneValidator = new ItalyPhoneValidator('+393401234567');
val1.isValid(); //true
val1.operatorName; //Vodafone
val1.isMobile(); //true

var val2:ItalyPhoneValidator = new ItalyPhoneValidator('0039 368 1234567');
val2.isValid(); //true
val2.operatorName; //TIM
val2.isMobile(); //true

var val3:ItalyPhoneValidator = new ItalyPhoneValidator('380 4567321');
val3.isValid(); //true
val3.operatorName; //Wind
val3.isMobile(); //true

var val4:ItalyPhoneValidator = new ItalyPhoneValidator('3933216547');
val4.isValid(); //true
val4.operatorName; //Tre
val4.isMobile(); //true

Como veis, se puede utilizar tanto el prefijo +39 como 0039 o sin prefijo, y con y sin espacios.
Si quereis hacer una prueba, os dejo un pequeño form para chequearlo:

Sorry, either Adobe flash is not installed or you do not have it enabled


Puedes encontrar la última versión en github:
https://github.com/singuerinc/singuerinc-blog/blob/master/src/net/singuerinc/labs/utils/validators/ItalyPhoneValidator.as

Posted in ActionScript 3, validators | Tagged , , , , , , , | Leave a comment

Just born: as3-audio

as3-audio
Hola, he comenzado a desarrollar as3-audio en una pequeña librería para simplificar la reproducción y controlar sonidos. No tendrá la posibilidad de crear sonidos sino que está pensada más para el desarrollo en websites/apps. La idea es simplificar un poco el trabajo con sonido en Actionscript, y tener algunas funciones básicas como play, pause, resume, stop y otras útiles como fadeIn, fadeOut, delay, etc. Otra de las características que destacará es la utilización de as3-signals para notificar los eventos. De momento está en desarrollo, puedes encontrar el código en github: as3-audio, la classe Audio ya es funcional. Si quieres puedes realizar un fork y cuando tengas algo interesante podemos incorporarlo a la librería!
Más o menos, la syntax será esta:

1
2
3
4
5
6
7
8
9
//Mediante la carga de un mp3:
var audio1:Audio = new Audio('audio1', 'audio.mp3');
audio1.volume = .5;
audio1.play();

//Con una Classe que extienda de Sound:
var audio2:AudioDeluxe = new AudioDeluxe('audio2', new AudioMP3());
audio2.play();
audio2.fade(0, 1, 1500); //from, to, time

Source: https://github.com/singuerinc/as3-audio

Posted in ActionScript 3, as3-audio | Tagged , , , , | Leave a comment

Validar un DNI/NIE/NIF de España con Actionscript

Validación DNI NIF NIE España
Hola, otra Class de validación, en este caso para validar un DNI español. Realicé una classe porque quería tener un set de funciones, y poder diferenciar si se trata de un nif o un nie.
La clase acepta “nies” que empiecen con letra o número y puede ser en mayúsculas o minúsculas, por ejemplo, es lo mismo Y9145668P que 19145668p.
Aquí el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package net.singuerinc.labs.utils.validators {
    /**
     * @author nahuel.scotti / blog.singuerinc.net
     */

    public class SpainDNIValidator {

        private var _dni:String;

        private var _isNie:Boolean;
        private var _isNif:Boolean;
        private var _valid:Boolean;

        private const validChars:String = 'TRWAGMYFPDXBNJZSQVHLCKET';
        private const nifRexp:RegExp = /^[0-9]{8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/i;
        private const nieRexp:RegExp = /^[XYZ]{1}[0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/i;

        public function SpainDNIValidator(dni:String) {
            _dni = dni;
            _valid = _validate();
        }

        public function isValid():Boolean {
            return _valid;
        }

        public function isNIF():Boolean {
            return _isNif;
        }

        public function isNIE():Boolean {
            return _isNie;
        }

        private function _validate():Boolean {

            var val:String = _dni.toString().toUpperCase();

            if (!nifRexp.test(val) && !nieRexp.test(val)) {
                return false;
            }

            var nie:String = val;
            nie = nie.replace(/^[X]/, '0');
            nie = nie.replace(/^[Y]/, '1');
            nie = nie.replace(/^[Z]/, '2');

            var dniLetter:String = val.substr(-1);
            var charIndex:int = int(nie.substr(0, 8)) % 23;

            if (validChars.charAt(charIndex) == dniLetter) {

                _isNif = nifRexp.test(val);
                _isNie = nieRexp.test(val);

                return true;
            }

            return false;
        }
    }
}

Y algunos ejemplos:

1
2
3
4
5
6
7
8
9
var val1:SpainDNIValidator = new SpainDNIValidator('x9464186p');
val1.isValid(); //true
val1.isNIF(); //false
val1.isNIE(); //true

var val2:SpainDNIValidator = new SpainDNIValidator('12345678Z');
val2.isValid(); //true
val2.isNIF(); //true
val2.isNIE(); //false

Si quieres hacer un pequeño test aquí tienes un form, algunos ejemplos válidos son: 94941545Y, 04787284H, 12044950B, 91356767P, Y6574394L, Z4640346D, X9267804T.

Sorry, either Adobe flash is not installed or you do not have it enabled


Puedes encontrar la última versión en github:
https://github.com/singuerinc/singuerinc-blog/blob/master/src/net/singuerinc/labs/utils/validators/SpainDNIValidator.as

Posted in ActionScript 3, españa, validators | Tagged , , , , | 2 Comments

Validar un código postal de España con Actionscript

as3 código postal españa
Hola, aquí os dejo una pequeña classe con una Regular Expresion que he hecho para validar códigos postales españoles. También, puedes saber el nombre de la provincia al que pertenece:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package net.singuerinc.labs.utils.validators {
    /**
     * @author nahuel.scotti / blog.singuerinc.net
     */

    public class SpainPostalCodeValidator {

        public var stateNames:Array = ['Alava/Araba', 'Albacete', 'Alicante', 'Almería', 'Avila', 'Badajoz', 'Islas Baleares', 'Barcelona', 'Burgos', 'Cáceres', 'Cádiz', 'Castellón', 'Ciudad Real', 'Córdoba', 'A Coruña/La Coruña', 'Cuenca', 'Gerona/Girona', 'Granada', 'Guadalajara', 'Gipuzkoa/Guipuzcoa', 'Huelva', 'Huesca', 'Jaen', 'León', 'Lérida/Lleida', 'La Rioja', 'Lugo', 'Madrid', 'Málaga', 'Murcia', 'Navarra', 'Orense/Ourense', 'Asturias', 'Palencia', 'Las Palmas', 'Pontevedra', 'Salamanca', 'S.C.Tenerife', 'Cantabria', 'Segovia', 'Sevilla', 'Soria', 'Tarragona', 'Teruel', 'Toledo', 'Valencia', 'Valladolid', 'Bizkaia/Vizcaya', 'Zamora', 'Zaragoza', 'Ceuta', 'Melilla'];

        private var _stateName:String;
        private var _stateCode:String;
        private var _isValid:Boolean;

        public function SpainPostalCodeValidator(codeOrStateName:String) {
            if (isNaN(Number(codeOrStateName)) == true) {
                var result:String = search(codeOrStateName);
                if (result == '') {
                    _isValid = false;
                } else {
                    result += '000';
                    _isValid = validate(result);
                }
            } else {
                _isValid = validate(codeOrStateName);
            }
        }

        public function get stateCode():String {
            return _stateCode;
        }

        public function get stateName():String {
            return _stateName;
        }

        public function isValid():Boolean {
            return _isValid;
        }

        private function validate(value:String):Boolean {

            var str:String = value.toString();
            if (str.length != 5) return false;

            var regExp:RegExp = /((?>^[5]{1})[0-2][0-9]{3})|((?>^[0]{1})[1-9]{1}[0-9]{3})|((?>^[1-4]{1})[0-9]{1}[0-9]{3})$/;
            var result:Boolean = regExp.test(str);
            if (result) {
                var codeInit:String = str.substr(0, 2);
                var idx:uint = Number(codeInit);
                _stateName = stateNames[idx - 1];
                _stateCode = codeInit;
            }

            return result;
        }

        private function search(stateName:String):String {

            stateName = stateName.toLowerCase();
            var state:int = -1;

            var l:uint = stateNames.length;
            for (var i:uint = 0; i < l; i++) {
                var s:String = stateNames[i];
                if (s.toLowerCase().search(stateName) != -1) {
                    state = i;
                    break;
                }
            }
            return state == -1 ? '' : ('0' + (state + 1)).substr(-2);
        }
    }
}

Algunos ejemplos válidos:

1
2
3
4
5
6
7
8
9
var sv1:SpainPostalCodeValidator = new SpainPostalCodeValidator('Barcelona');
sv1.stateName; //Barcelona
sv1.stateCode; //08
sv1.isValid(); //true

var sv2:SpainPostalCodeValidator = new SpainPostalCodeValidator('28001');
sv2.stateName; //Madrid
sv2.stateCode; //28
sv2.isValid(); //true

Y otros que son inválidos:

1
2
3
4
5
6
7
8
9
var sv3:SpainPostalCodeValidator = new SpainPostalCodeValidator('New York');
sv3.stateName; //null
sv3.stateCode; //null
sv3.isValid(); //false

var sv4:SpainPostalCodeValidator = new SpainPostalCodeValidator('80800');
sv4.stateName; //null
sv4.stateCode; //null
sv4.isValid(); //false

Puedes descargar el código desde github:
https://github.com/singuerinc/singuerinc-blog/blob/master/src/net/singuerinc/labs/utils/validators/SpainPostalCodeValidator.as

Posted in ActionScript 3, españa, tip, validators | Tagged , , , | Leave a comment

as3-signals + binding

as3-signals & binging
Estoy trabajando en un proyecto donde necesito actualizar la vista constantemente con información del modelo. En Flex esto es relativamente fácil mediante la etiqueta [Bindable], pero en un proyeto puramente as3 no lo es tanto.
Aquí es donde as3-signals nos puede dar una mano, si sois como yo, que ando buscando siempre código nuevo que me facilite la vida habréis notado que existe un branch en as3-signals de Robert Penner llamado “binding”.
Es un set de classes que nos permiten vincular una propiedad de un objeto a otra propiedad de otro objecto. Me explico: por ejemplo, cada vez que actualizo la propiedad “name” del objeto User quiero que se actualice la propiedad “text” de un “TextField”.
Para hacer esto necesitamos que nuestro objeto User implemente la interface IBindable que se encuentra dentro del paquete de as3-signals, entonces tendremos una nueva propiedad dentro de User llamada changeSignal que será la encargada de notificar sobre los cambios en el objeto. Veamos un poco el código, la classe User nos quedaría así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package net.singuerinc.labs.signals.binding {

    import org.osflash.signals.binding.ChangeSignal;
    import org.osflash.signals.binding.IBindable;
    import org.osflash.signals.binding.IChangeSignal;

    public class User implements IBindable {

        private var _name:String;
        private var _changeSignal:ChangeSignal;

        public function User() {
        }

        public function set name(value:String):void {
            _name = value;
            changeSignal.dispatch('name', _name);
        }

        public function get name():String {
            return _name;
        }

        public function get changeSignal():IChangeSignal {
            return _changeSignal ||= new ChangeSignal(this);
        }
    }
}

Ahora, para vincular el TextField con User necesitamos de Binder, esta vinculará los dos objetos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package net.singuerinc.labs.signals.binding {

    import com.bit101.components.PushButton;
    import org.osflash.signals.binding.Binder;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;

    public class SignalsBindingExample extends Sprite {

        public var user:User;

        public function SignalsBindingExample() {

            new PushButton(this, 0, 20, 'change user name', onClick);

            var txt1:TextField = new TextField();
            txt1.autoSize = TextFieldAutoSize.LEFT;
            addChild(txt1);

            user = new User();
            user.name = 'User1';

            var binder:Binder = new Binder();
            binder.bind(txt1, 'text', user, 'name');
        }

        private function onClick(event:MouseEvent):void {
            user.name = 'User' + Math.random();
        }
    }
}

Listo, ahora cada vez que hagamos actualicemos user.name automáticamente Binder hará que ese valor se refleje en el TextField!
Source: https://github.com/singuerinc/singuerinc-blog/tree/master/src_examples/net/singuerinc/labs/signals/binding

Posted in ActionScript 3, as3signals | Tagged , , , | 1 Comment

Validar un teléfono de España con Actionscript

Aquí os dejo otra Regular Expresion classe para validar teléfonos móviles en España, hasta hace poco, sólo existian números móviles que empezaban por “6″, ahora se ha agregado el “7″, la classe valida tanto móviles como fijos y pueden contener espacios:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package net.singuerinc.labs.utils.validators {

    /**
     * @author nahuel.scotti
     */

    public class SpainPhoneValidator {

        private var _isMobile:Boolean;
        private var _isFixed:Boolean;
        private var _isValid:Boolean;

        public function SpainPhoneValidator(tel:String) {
            _isValid = _validate(tel);
        }

        private function _validate(value:Object):Boolean {

            var str:String = value.toString();
            str = str.replace(/\s/g, '');
            if (str.length != 9) return false;

            var regExp:RegExp = /^[679]{1}[0-9]{8}$/;
            var result:Boolean = regExp.test(str);
           
            if(result){
                _isFixed = /^[9]/.test(str);
                _isMobile = /^[67]/.test(str);
            }
           
            return result;
        }
       
        public function isValid():Boolean{
            return _isValid;
        }
       
        public function isFixed():Boolean{
            return _isFixed;
        }
       
        public function isMobile():Boolean{
            return _isMobile;
        }
    }
}

Algunos ejemplos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var val1:SpainPhoneValidator = new SpainPhoneValidator('639 125 230');
val1.isValid(); //true
val1.isFixed(); //false
val1.isMobile(); //true

var val2:SpainPhoneValidator = new SpainPhoneValidator('668515187');
val2.isValid(); //true
val2.isFixed(); //false
val2.isMobile(); //true

var val3:SpainPhoneValidator = new SpainPhoneValidator('133 560 158');
val3.isValid(); //false
val3.isFixed(); //false
val3.isMobile(); //false

var val4:SpainPhoneValidator = new SpainPhoneValidator('932 510 258');
val4.isValid(); //true
val4.isFixed(); //true
val4.isMobile(); //false

Puedes descargarte el código desde github:
https://github.com/singuerinc/singuerinc-blog/blob/master/src/net/singuerinc/labs/utils/validators/SpainPhoneValidator.as

Posted in ActionScript 3, españa, tip, validators | Tagged , , | Leave a comment