在asp.Net中调用java脚本函数正则表达式验证器失败

Call to a java script function Regular Expression Validator to fail In asp.Net

本文关键字:正则表达式 函数 验证 失败 脚本 java asp Net 调用      更新时间:2023-09-26

我有一个验证文本框的<asp:RegularExpressionValidator>,但我也有一个javascript函数,防止在文本框中输入非数值。当使用表达式验证器,它的工作很好,但只要我添加onkeydown="return jsDecimals(event);"到文本框调用jsDecimals()函数验证器不工作。我做错了什么?

asp Code

<asp:TextBox ID="TextBox2" runat="server" CssClass="form-control" CausesValidation="true" MaxLength="13" onkeydown="return jsDecimals(event);"></asp:TextBox> 
<asp:Button ID="Button5" runat="server" Text="Retrieve" CssClass="btn btn-default" OnClick="Button5_Click"/>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" CssClass="tooltip-arrow"
      ErrorMessage="ID must be 13 Numeric characters" ControlToValidate="TextBox2" ValidationExpression="^[0-9]{13}$">
</asp:RegularExpressionValidator>
JavaScript:

function jsDecimals(e) {
var evt = (e) ? e : window.event;
var key = (evt.keyCode) ? evt.keyCode : evt.which;
if (key != null) {
    key = parseInt(key, 10);
    if ((key < 48 || key > 57) && (key < 96 || key > 105)) {
        if (!jsIsUserFriendlyChar(key, "Decimals")) {
            return false;
        }
    }
    else {
        if (evt.shiftKey) {
            return false;
        }
    }
}
return true;
function jsIsUserFriendlyChar(val, step) {
// Backspace, Tab, Enter, Insert, and Delete  
if (val == 8 || val == 9 || val == 13 || val == 45 || val == 46) {
    return true;
}
// Ctrl, Alt, CapsLock, Home, End, and Arrows  
if ((val > 16 && val < 21) || (val > 34 && val < 41)) {
    return true;
}
if (step == "Decimals") {
    if (val == 190 || val == 110) {  //Check dot key code should be allowed
        return true;
    }
}
// The rest  
return false;
}

语法错误。查看下面我对你代码的评论。您似乎没有在return true;之后关闭函数,并且您最终在第一个函数中声明下一个函数。

function jsDecimals(e) {
  var evt = (e) ? e : window.event;
  var key = (evt.keyCode) ? evt.keyCode : evt.which;
  if (key != null) {
    key = parseInt(key, 10);
    if ((key < 48 || key > 57) && (key < 96 || key > 105)) {
      if (!jsIsUserFriendlyChar(key, "Decimals")) {
        return false;
      }
    } else {
      if (evt.shiftKey) {
        return false;
      }
    }
  }
  return true; // <-- what's this? is there supposed to be a closing bracket after this line?
  function jsIsUserFriendlyChar(val, step) {
  .
  .
  .