2012-09-17 28 views
2

我正在使用javascript来验证来自ASPxGridView控件(DevExpress组件)内的文本框的输入。使用javascript验证输入字符数量,文本长度和小数位数

我使用这个JavaScript代码来验证它(的OnKeyPress直通事件):

function CheckKey(s, e) { 
    var key = ASPxClientUtils.GetKeyCode(e.htmlEvent); 
    var char = String.fromCharCode(key); 
    if (e.htmlEvent.shiftKey) { 
     if (!IsAvailableChar(char)) 
      ASPxClientUtils.PreventEvent(e.htmlEvent); 
    } else 
     if (!(IsAvailableChar(char) || IsAvailableKey(key))) ASPxClientUtils.PreventEvent(e.htmlEvent); 

    return; 
} 

function IsAvailableChar(char) { 
    var AvailableChars = ","; 
    return AvailableChars.indexOf(char) != -1; 
} 

function IsAvailableKey(key) { 

    switch (key) { 
     case 46: //delete 
      return true; 
      break; 
     case 37: //left arrow 
      return true; 
      break; 
     case 39: //right arrow 
      return true; 
      break; 
     case 16: //shift 
      return true; 
      break; 
     case 188: //comma 
      return true; 
      break; 
     default: 
      return false; 
      break; 
    } 

我用这“块”的某些字符,它工作正常。 但现在我想做一些更复杂的事情:我不希望用户在文本框中输入多个逗号。

稍微复杂一点:这个文本框的最大长度是6.我希望它只允许两个小数位,最多三位小数点前的数字。 例如: 我希望它允许这些字符串:“123,12”,“45,32”,“7,65”,“9,6”,“85,32”,“94,1”,“ 310,2" 。 我不希望它允许这些字符串:“1,123”,“125,789”,“1234,2”

有关如何做到这一点的任何想法?

谢谢!

修改:

我试图用你们告诉我两个正则表达式是这样的:

function CheckKey(s, e) { 
    var key = ASPxClientUtils.GetKeyCode(e.htmlEvent); 
    var char = String.fromCharCode(key); 

    var text = document.getElementsByName(s.uniqueID)[0].value + char; 

    var regEx = new RegExp("/^\d{0,3}(,\d{0,2})?$/"); 

    if(regEx.test(text)) 
     return; 
    else 
     ASPxClientUtils.PreventEvent(e.htmlEvent); 

    return; 
} 

然而,regEx.test(text)总是返回假,即使在输入匹配正表达。

另一个编辑:

我从这个改变了RegExp对象的实例在上面的代码:

var regEx = new RegExp("/^\d{0,3}(,\d{0,2})?$/"); 

要这样:

var regEx = /^\d{0,3}(,\d{0,2})?$/ 

而现在它的工作,谢谢!

+1

做'console.log(文本)'在创建文本之后,并将结果发布给我们。 – FrankieTheKneeMan

+1

还包括事件发生时盒子的实际内容。 – FrankieTheKneeMan

+0

不需要,我更新问题与我所做的工作。谢谢! (: – gabsferreira

回答

1
/^\d{0,3}(,\d{0,2})?$/.test(textbox.value + char); 

这将与任意数字匹配多达三位前小数位。可选地,它允许一个小数和最多2个小数位。还匹配空字符串,以便于使用。所以这将检查以确保结果框匹配。

正则表达式的解释:

^ 

串的开始

\d{0,3} 

0至3个位数(含)

(...)? 

可选组

,\d{0,2} 

逗号后0至2位(含)

$ 

结束字符串。

+0

我编辑了我的问题 – gabsferreira

1
var regex_test = /^[1-9][0-9]{0,2},[0-9][0-9]{0,1}$/; 
var string = '766,99'; 

if(regex_test.test(string)){ 
    console.log('good'); 
} 
+0

这将适用于事实验证后,但我认为OP正在寻找动态验证。 – FrankieTheKneeMan

相关问题