Reputation: 332
Is there a way to restrict text to nubmers only in an input textfield? I tried using:
myInputText.restrict = "0-9";
But it had no effect. Are there any other solutions?
Upvotes: 1
Views: 4607
Reputation: 6898
[EDIT: My method described below is an alternative to .restrict, and can theoretically allow for much finer control.]
Yes, you can, quite quickly. We're going to combine a Regex and an event listener.
First off, you're going to need to set up an event listener on the text box. I'll call the input box txtInput, for the sake of conversation. This will point to a function we'll write called validate();
txtInput.addEventListener(KeyboardEvent.KEY_DOWN, validate);
Now, we need to create our function.
function validate(evt:KeyboardEvent):void
{
var currentString:String = txtInput.text; //It is usually easier to work with the textInput contents as a string.
var numbersRegex:RegExp = /^\d*$/; //A regular expression accepting zero or more numbers ONLY.
var invalidRegex:RegExp = /\D+/; //A regular expression accepting one or more NON-numbers.
if(numbersRegex.test(currentString) == false) //Run the test. If it returns false...
{
currentString = currentString.replace(invalidRegex, ""); //Removes all non-numbers.
}
//Else, we do nothing.
txtInput.text = currentString; //Put the updated string back into the input box.
}
(Granted, that code is untested, but it should more or less work.)
The logic going on here: The user enters a character into the box. The event listener fires as soon as the key is pressed. If the string isn't 100% numbers, then the string is searched for all non-number characters, and those characters are removed.
EDIT AS REQUESTED: Also, make sure you don't have conflicting instance names. If you have two input boxes with the same name, Flash may be looking at the wrong one.
txtInput.text = "Sample text."
should throw a compiler error if there's a duplicate, or in the worst case, show you which input box you ARE affecting.
Upvotes: 0