正则表达式max-length不起作用

时间:2016-12-08 12:57:41

标签: javascript regex

        var xmlDoc = new XmlDocument();
        xmlDoc.PreserveWhitespace = false;
        xmlDoc.LoadXml(xmlData);
        var signedXmlDoc = new SignedXml(xmlDoc);
        var signatureNodeList = xmlDoc.GetElementsByTagName("Signature");
        signedXmlDoc.LoadXml((XmlElement)signatureNodeList[0]);
        var signingCertificate = new X509Certificate2(sender.SigningCertificate);
        foreach (var ex in signingCertificate.Extensions)
        {
            if (ex.Oid.Value == "2.5.29.15")
            {
                var ext = (X509KeyUsageExtension)ex;
                if (!ext.KeyUsages.HasFlag(X509KeyUsageFlags.NonRepudiation))
                    throw new CertificateException("The signing certificate does not support non-repudiation.");
            }
        }

        var transmittedCert = new X509Certificate2(Convert.FromBase64String(xmlDoc.GetElementsByTagName("X509Certificate")[0].InnerText));
        if (transmittedCert.SerialNumber != signingCertificate.SerialNumber)
            throw new CertificateException("Serial numbers do not match. The message was signed by another certificate");

        var validSignature = signedXmlDoc.CheckSignature();

仅采用整数但最大长度不起作用是正确的。它需要超过11位数。

3 个答案:

答案 0 :(得分:1)

这种手动输入验证不是现在通常在HTML5中编写应用程序的方式。这是对糟糕的旧jQuery日的回归。简单地扔掉键击是一种糟糕的用户体验 - 用户不知道他做错了什么,并且可能认为他的键盘坏了。如果您陷入keyup事件,您也会错过一些场景,例如当用户将文本拖放到输入框中时。或者,如果用户键入 CTRL + V 将文本粘贴到框中,您将最终查看该击键而不是粘贴的字符。

HTML5将pattern属性添加到input元素,允许您进行基于regexp的验证。这具有许多优点。例如,可以使用带有:invalid伪类的CSS设置无效条目的样式。无效的表单条目将自动阻止提交,并提供描述特定问题的用户友好的气球。

在你的情况下:

<input pattern="\\d{1, 11}">

请注意,不需要^$个锚点 - 在这种情况下它们是隐含的。

不需要JS。

答案 1 :(得分:0)

正如你所说:

  

我想只允许写数字,最大长度应为十一(11)位。

你可以:

  1. 使用<input type="number" maxlength="11" />
  2. 使用正则表达式/^\d{1,11}$/
  3. document.addEventListener('DOMContentLoaded', function() {
    function valueIsValid(v) {
    
      return /^\d{1,11}$/.test(v);
    }
      var foo = document.querySelector('#foo');
    
    foo
      .addEventListener('change', function() {
        console.log('valid', valueIsValid(foo.value), foo.value)
      })
    ;
    });
    <input id="foo" />

答案 2 :(得分:0)

这是我从你的问题中理解的。尝试这样的事情。

var count = 0;

function test() {
    var regex = new RegExp("^[0-9]{1,11}$");
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);

   if(count<11){
    if (!regex.test(key)) {
        count=0;
        event.preventDefault();
        return false;
    }
     count++;
   }
   return false;   
}