Pages

Search Code Shode

Wednesday, July 21, 2010

Validating/Masking Numbers In TextBox using Regular Expression Validator and Javascript

It wont allow spaces before or after the digits but it wont if there are only spaces so you need RequiredFieldValidator too
the RegularExpressionValidator to validate the only number without using JavaScript. So something like this:


<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ControlToValidate="TextBox1"
    ValidationExpression="\d+" Display="Static" EnableClientScript="true" ErrorMessage="Please enter numbers only"
    runat="server">


Where as if you want to forbid user to type, copy/paste, drag/drop any text other than numbers, or if you want extract numbers from user entered values, you can use code below:

For this example i am trying to validate user to enter age in a textbox, which should not be other than number:


<asp:TextBox ID="txtAge" MaxLength="3" onblur="extractNumber(this,2,false);"
    onkeypress="return blockNonNumbers(this, event, true, false);"
    onkeyup="extractNumber(this,2,false);" runat="server">
</asp:TextBox>
<asp:RequiredFieldValidator ControlToValidate="txtAge" ErrorMessage="Please Enter Age"
    ID="rfvtxtAge" runat="server">*
</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ControlToValidate="txtAge"
    ErrorMessage="Please Enter Valid Age" ID="revtxtAge" runat="server"
    SetFocusOnError="true" ValidationExpression="^\d+$">*
</asp:RegularExpressionValidator>


Using asp:RequiredFieldValidator makes it sure that user enter some value.
Script below extract numbers / forbid user to enter non-numeric values:


<script type="text/javascript">
    function extractNumber(obj, decimalPlaces, allowNegative) {
        var temp = obj.value;

        // avoid changing things if already formatted correctly
        var reg0Str = '[0-9]*';
        if (decimalPlaces > 0) {
            reg0Str += '\\.?[0-9]{0,' + decimalPlaces + '}';
        } else if (decimalPlaces < 0) {
            reg0Str += '\\.?[0-9]*';
        }
        reg0Str = allowNegative ? '^-?' + reg0Str : '^' + reg0Str;
        reg0Str = reg0Str + '$';
        var reg0 = new RegExp(reg0Str);
        if (reg0.test(temp)) return true;

        // first replace all non numbers
        var reg1Str = '[^0-9' + (decimalPlaces != 0 ? '.' : '') + (allowNegative ? '-' : '') + ']';
        var reg1 = new RegExp(reg1Str, 'g');
        temp = temp.replace(reg1, '');

        if (allowNegative) {
            // replace extra negative
            var hasNegative = temp.length > 0 && temp.charAt(0) == '-';
            var reg2 = /-/g;
            temp = temp.replace(reg2, '');
            if (hasNegative) temp = '-' + temp;
        }

        if (decimalPlaces != 0) {
            var reg3 = /\./g;
            var reg3Array = reg3.exec(temp);
            if (reg3Array != null) {
                // keep only first occurrence of .
                //  and the number of places specified by decimalPlaces or the entire string if decimalPlaces < 0
                var reg3Right = temp.substring(reg3Array.index + reg3Array[0].length);
                reg3Right = reg3Right.replace(reg3, '');
                reg3Right = decimalPlaces > 0 ? reg3Right.substring(0, decimalPlaces) : reg3Right;
                temp = temp.substring(0, reg3Array.index) + '.' + reg3Right;
            }
        }

        obj.value = temp;
    }
    function blockNonNumbers(obj, e, allowDecimal, allowNegative) {
        var key;
        var isCtrl = false;
        var keychar;
        var reg;

        if (window.event) {
            key = e.keyCode;
            isCtrl = window.event.ctrlKey
        }
        else if (e.which) {
            key = e.which;
            isCtrl = e.ctrlKey;
        }

        if (isNaN(key)) return true;

        keychar = String.fromCharCode(key);

        // check for backspace or delete, or if Ctrl was pressed
        if (key == 8 || isCtrl) {
            return true;
        }

        reg = /\d/;
        var isFirstN = allowNegative ? keychar == '-' && obj.value.indexOf('-') == -1 : false;
        var isFirstD = allowDecimal ? keychar == '.' && obj.value.indexOf('.') == -1 : false;

        return isFirstN || isFirstD || reg.test(keychar);
    }
</script>


Hope it helps!

Happy Coding!
Happy Shoding!

اشتہارات