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位数。
答案 0 :(得分:1)
这种手动输入验证不是现在通常在HTML5中编写应用程序的方式。这是对糟糕的旧jQuery日的回归。简单地扔掉键击是一种糟糕的用户体验 - 用户不知道他做错了什么,并且可能认为他的键盘坏了。如果您陷入keyup
事件,您也会错过一些场景,例如当用户将文本拖放到输入框中时。或者,如果用户键入 CTRL + V 将文本粘贴到框中,您将最终查看该击键而不是粘贴的字符。
HTML5将pattern
属性添加到input
元素,允许您进行基于regexp的验证。这具有许多优点。例如,可以使用带有:invalid
伪类的CSS设置无效条目的样式。无效的表单条目将自动阻止提交,并提供描述特定问题的用户友好的气球。
在你的情况下:
<input pattern="\\d{1, 11}">
请注意,不需要^
或$
个锚点 - 在这种情况下它们是隐含的。
不需要JS。
答案 1 :(得分:0)
正如你所说:
你可以:我想只允许写数字,最大长度应为十一(11)位。
<input type="number" maxlength="11" />
/^\d{1,11}$/
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;
}