2013-03-17 87 views
0

您好我是新来的JavaScript和我有以下功能:正则表达式在JavaScript

function checkform() { 
    var theForm = document.getElementById('login_form'); 
    var regName = /^[a-zA-Z ]+$/; 
    var firstname = theForm.firstname.value; 

    if (
     (firstname == "" || theForm.firstname.value.length > 30) && 
     (regName.test(firstName) == false) 
    ) { 
     alert("That is not a valid first name!"); 
     theForm.firstname.focus(); 
     return false; 
    } 
} 

它工作在这个意义上,它会检查数据不空,不大于30。我的问题是目前允许用户输入与我的正则表达式(即数字数据)不匹配的数据。我看不出有关逻辑的任何问题。

感谢

+0

检查对正则表达式'KeyPress'或'Blur'事件,如果犯规的比赛然后清除'textbox' – Vitthal 2013-03-17 14:41:38

回答

3

在你的条件语句尝试这样做:

if ((firstname == "" || theForm.firstname.value.length > 30) || (regName.test(firstname) == false)) { 
    // ... 
} 

我已经改变了 “& &”(和)运算符“|| “ (或),因为你不需要检查这两个条件(空或长于30,不匹配正则表达式),但只是其中任何一个(空或长于30或不正确的正则表达式)。

+0

Precicely ..其实,如果字符串为40长,正则表达式很满意它会通过.. 。如果表单元素长度设置为30个字符,他只需要空字符串测试||正则表达式测试 – Radiotrib 2013-03-17 14:50:03

+0

已经尝试了这种解决方案,仍然允许测试数据 - '128'。 – underflow 2013-03-17 14:51:42

+0

我已经用“firstname”而不是“firstName”(Javascript是区分大小写的语言)更新了代码片段,现在就试用它。 – mirrormx 2013-03-17 14:55:10

1

试试吧

var regName = /^[a-zA-Z ]{3,30}$/; 
if (!regName.test(firstName)){ //make an error 
0
<input id="txtChar" onkeypress="return isNumberKey(event)" 
     type="text" name="txtChar"> 

    function isNumberKey(evt) 
    { 
     var charCode = (evt.which) ? evt.which : event.keyCode; 
     if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57) || event.value > 30) 
     return false; 

     return true; 
    }