Allow Only Numbers in a Textbox

Discussion in 'JavaScript and AJAX' started by pradeep, Dec 27, 2006.

  1. pradeep

    pradeep Team Leader

    Joined:
    Apr 4, 2005
    Messages:
    1,645
    Likes Received:
    87
    Trophy Points:
    0
    Occupation:
    Programmer
    Location:
    Kolkata, India
    Home Page:
    http://blog.pradeep.net.in
    Sometimes we need the user to enter only numbers in a text field, so I have some up with a small piece of JavaScript to do exactly that. It works for both IE and Firefox.

    Code:
    function onlyNumbers(evt)
    {
        var e = event || evt; // for trans-browser compatibility
        var charCode = e.which || e.keyCode;
    
        if (charCode > 31 && (charCode < 48 || charCode > 57))
            return false;
    
        return true;
    
    }
    Example Usage:
    HTML:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE>Allow Only Numbers
    </HEAD>
    
    <BODY>
    <script language="JavaScript">
    function onlyNumbers(evt)
    {
    	var e = event || evt; // for trans-browser compatibility
    	var charCode = e.which || e.keyCode;
    
    	if (charCode > 31 && (charCode < 48 || charCode > 57))
    		return false;
    
    	return true;
    
    }
    </script>
    <input type="text" onkeypress="return onlyNumbers();">
    </BODY>
    </HTML>
     
  2. vikas

    vikas New Member

    Joined:
    May 31, 2007
    Messages:
    7
    Likes Received:
    0
    Trophy Points:
    0
    Location:
    Allahabad (U.P)
    thanks for this but u must mention the comments as much as possible so that other readers could eaisily get this. thx again
     
  3. Vivid

    Vivid New Member

    Joined:
    Jun 13, 2007
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    Is there any way to add the ability to enter in the "-" character as well. I think it is key code 109 or 189. I can't seem to get it to accept only numbers and this one extra character.
     
  4. shabbir

    shabbir Administrator Staff Member

    Joined:
    Jul 12, 2004
    Messages:
    15,375
    Likes Received:
    388
    Trophy Points:
    83
    I am not a JS expert but you need to edit the condition
    Code:
    if (charCode > 31 && (charCode < 48 || charCode > 57))
    so that when its 109 or 189 then it does not return false.
     
  5. pradeep

    pradeep Team Leader

    Joined:
    Apr 4, 2005
    Messages:
    1,645
    Likes Received:
    87
    Trophy Points:
    0
    Occupation:
    Programmer
    Location:
    Kolkata, India
    Home Page:
    http://blog.pradeep.net.in
    Shabbir is right you just have to modify the condition to suit your needs, e.g.

    Code:
    if (charCode > 31 && ((charCode < 48 || charCode > 57) || charCode !=109))
      return false;
    
    That should do it!
     
  6. Darkness1337

    Darkness1337 New Member

    Joined:
    Mar 15, 2007
    Messages:
    130
    Likes Received:
    1
    Trophy Points:
    0
    wow, really good!
    thanx a lot! :) this helps to get me some more marks on my web designing course:D lol
     
  7. Iona

    Iona New Member

    Joined:
    Sep 30, 2007
    Messages:
    14
    Likes Received:
    0
    Trophy Points:
    0
    Not so smart. This doesn't allow for the shift key being pressed, so allows any of !"£$%^&*() as well as any numeric.

    Obviously (??) the onKeyDown etc doesnt detect Shift1 etc.

    So as a validation before assigning to a numeric field then this just doesnt work.
     
  8. Iona

    Iona New Member

    Joined:
    Sep 30, 2007
    Messages:
    14
    Likes Received:
    0
    Trophy Points:
    0
    :pleased:
    The problem with the shift key can be fixed as follows :
    {
    var e = event || evt; // for trans-browser compatibility
    var charCode = e.which || e.keyCode;

    if (charCode > 31 && (charCode < 48 || charCode > 57))
    return false;
    if (e.shiftkey) return false;
    return true;

    }
    The down side of this is that it efectively disables the numeric key pay because the Num Lock sets the shift key.

    You probably need to extend the numeric character set tested for to include a decimal point . or , depending upon convention, the thousand marker , and + and - to detect signs and on occasions the currency symbols such as £$ etc
     
  9. darksemo

    darksemo New Member

    Joined:
    Mar 2, 2009
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    Helloo,
    I'm not a javascript expert also, but this function has a parameter and we when we called it down , it doesn't talk any parameters . How Come?:thinking:
     
  10. gkumar

    gkumar New Member

    Joined:
    Jun 16, 2009
    Messages:
    58
    Likes Received:
    5
    Trophy Points:
    0
    In this example we can allow Only Numbers in a Textbox.
    HTML:
    <HTML>
       <HEAD>
       <SCRIPT language=Javascript>
          <!--
          function isNumberKey(evt)
          {
             var charCode = (evt.which) ? evt.which : event.keyCode
             if (charCode > 31 && (charCode < 48 || charCode > 57))
                return false;
    
             return true;
          }
          //-->
       </SCRIPT>
       </HEAD>
       <BODY>
          <INPUT id="txtChar" onkeypress="return isNumberKey(event)" type="text" name="txtChar">
       </BODY>
    </HTML>
    
     
  11. Saket

    Saket New Member

    Joined:
    Jul 21, 2009
    Messages:
    42
    Likes Received:
    0
    Trophy Points:
    0
    Location:
    Don't Know
    Ohh thats great, you have used ascii, but what about without using ascii, can we achieve it ?
     
  12. WebspoonUK

    WebspoonUK New Member

    Joined:
    Mar 16, 2010
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    Occupation:
    Professional Web Developer
    Location:
    Cheshire
    Home Page:
    http://www.webspoon.co.uk
    In order to detect the shift key, you can add a hidden input box and set its value to 1 whenever the shift key is pressed from within your js function. Then simply check the value of the hidden input box and disallow/allow as necessary (You will need two events to do this - keydown and keypress).
     
  13. Manojbijnori

    Manojbijnori New Member

    Joined:
    Jun 16, 2009
    Messages:
    29
    Likes Received:
    1
    Trophy Points:
    0
    Occupation:
    Lecturer In Computer Science Department In Enginer
    Location:
    Bijnore
    This is an example for allowing only number in textbox I think this will help you
    Code:
    import java.awt.Container;
    import java.awt.Graphics;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.DocumentListener;
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.Document;
    import javax.swing.text.PlainDocument;
    
    public class ValidationTestFrame extends JFrame implements DocumentListener {
      JLabel label = new JLabel("I only accept numbers");
      private IntTextField intFiled;
    
      public ValidationTestFrame() {
        setTitle("ValidationTest");
        setSize(300, 200);
        addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            System.exit(0);
          }
        });
    
        Container contentPane = getContentPane();
    
        JPanel p = new JPanel();
        intFiled = new IntTextField(12, 3);
        p.add(intFiled);
        intFiled.getDocument().addDocumentListener(this);
    
        contentPane.add(p, "South");
        contentPane.add(label, "Center");
      }
    
      public void insertUpdate(DocumentEvent e) {
        setLabel();
      }
    
      public void removeUpdate(DocumentEvent e) {
        setLabel();
      }
    
      public void changedUpdate(DocumentEvent e) {
      }
    
      public void setLabel() {
        if (intFiled.isValid() ) {
          int value = intFiled.getValue();
          label.setText(Integer.toString(value));
        }
      }
    
      public static void main(String[] args) {
        JFrame frame = new ValidationTestFrame();
        frame.show();
      }
    
    }
    
    class IntTextField extends JTextField {
      public IntTextField(int defval, int size) {
        super("" + defval, size);
      }
    
      protected Document createDefaultModel() {
        return new IntTextDocument();
      }
    
      public boolean isValid() {
        try {
          Integer.parseInt(getText());
          return true;
        } catch (NumberFormatException e) {
          return false;
        }
      }
    
      public int getValue() {
        try {
          return Integer.parseInt(getText());
        } catch (NumberFormatException e) {
          return 0;
        }
      }
      class IntTextDocument extends PlainDocument {
        public void insertString(int offs, String str, AttributeSet a)
            throws BadLocationException {
          if (str == null)
            return;
          String oldString = getText(0, getLength());
          String newString = oldString.substring(0, offs) + str
              + oldString.substring(offs);
          try {
            Integer.parseInt(newString + "0");
            super.insertString(offs, str, a);
          } catch (NumberFormatException e) {
          }
        }
      }
    
    }
     
    Last edited by a moderator: Apr 7, 2010
  14. sharma.kapil28

    sharma.kapil28 New Member

    Joined:
    Jul 22, 2011
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    use isNaN
    for more detail with example
    visit
    urfusion.blogspot
     
  15. FaysalAhmed

    FaysalAhmed New Member

    Joined:
    Oct 4, 2011
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    hi,
    i used the code above and find the following error, event is not defined

    how ever i used the following code and it worked fine,

    Code:
     function onlyNumbers(evt)
                {
                   /* if (!evt) {
                        evt = window.event;
                    } */
    
                    var e = window.event || evt; // for trans-browser compatibility
                    var charCode = e.which || e.keyCode;
    
                    if (charCode > 31 && (charCode < 48 || charCode > 57))
                        return false;
    
                    return true;
    
                }
    any idea about this issue?
     
  16. tinytomhanks

    tinytomhanks Banned

    Joined:
    Apr 20, 2012
    Messages:
    6
    Likes Received:
    0
    Trophy Points:
    0
    Occupation:
    business admin
    Location:
    US and India
    Home Page:
    http://www.itchimes.com/
    I am just starting java script, I'll use this code soon. thank you for sharing.
     
  17. newindiasolutions

    newindiasolutions New Member

    Joined:
    Apr 28, 2012
    Messages:
    2
    Likes Received:
    0
    Trophy Points:
    0
    Occupation:
    Local SEO Services in Delhi, Search Engine Optimiz
    Location:
    New India Solutions, Plot No.12,Block-J, Dharampur
    Home Page:
    http://www.newindiasolutions.com/
    Web development is beautiful field and in search engine optimization it is more important. Because there is main work on website.
     
  18. edwardallene

    edwardallene New Member

    Joined:
    Apr 16, 2012
    Messages:
    11
    Likes Received:
    1
    Trophy Points:
    0
    Home Page:
    http://shop.pchappy.com.au/
    Is it possible to combine the characters as well as the numbers? What problem could fix your codes? Calculator? Digit Problem Solving? Anyway, this would add information to my HTML note. Thanks for the information.
     
  19. c_user

    c_user New Member

    Joined:
    Aug 23, 2009
    Messages:
    86
    Likes Received:
    8
    Trophy Points:
    0
    Occupation:
    Php dev
    Location:
    Bhubaneswar
    The HTML tag goes like this:

    Code:
    <form action="#.html" onsubmit=" return validate();" name="myform" method="post" style="border:thin;" >
    		<table align="center" bgcolor="#CCCCCC"; cellpadding="2px" style="text-align:left">
        <tr>	
                	<th>Contact No.</th><td><input type="text" id="cont" name="cont" /><font size="+0" color="#FF0000">*</font></td>
        </tr>
    </table>
    </form>
    
    The javascript goes :
    Code:
    function validate()
    {
    if( Uize.isNaN(document.getElementById("cont").value))
    	{
    		alert("Invalid Number.");
    		return false;
    	}
    }
    
    >>>Happy coding <<<
     
    shabbir likes this.

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice