我需要一些帮助,因为我在检测突出字符方面遇到了麻烦。
我有一个在PC和MAC上运行的应用程序(html,css,js)。 它包含一些具有以下属性的输入字段:
由于HTML输入必须包含特定数量的字符,因此我无法使用type="number"
,因此其格式为:<input type="tel" maxlength="8"
我的js功能如下:
onChangeUserId: function (e) {
var theEvent = e.view.event;
var key = theEvent.keyCode || theEvent.which;
keyValue = String.fromCharCode(key);
var regex = /[0-9]{1,8}/;
if (key === 13) {
// validation function
} else if (!regex.test(keyValue)) {
theEvent.returnValue = false;
if (theEvent.preventDefault) theEvent.preventDefault();
}
},
我的问题是这是在Windows上运行,但OSx似乎允许以下字符(都是重音符号):^¨`
我没有制作这个代码,我“只是”必须实际修复这个bug,所以也许我错过了一些东西?但是我已经在互联网上寻找了一个漫长的时间,尝试了很多东西(特别是在正则表达式上,但这部分似乎最终还是很好)并且无法找到我为什么遇到这个问题以及如何解决它:/
如果你们中的一些人有答案,我会很高兴听到它(我现在很绝望é_è)
谢谢:)
修改
正如vove建议的那样here,我跟着这个堆栈link,它引导我进入这个JSFiddle Demo。这个演示适用于我的电脑,但是使用我的mac,它允许字符^¨`,所以即使这个例子也不适用于我:/
还有其他人有问题吗?
答案 0 :(得分:1)
我前一段时间停止尝试解决我的问题,但是从我记得的部分原因是我的代码使用了“onKeyPressed”函数但是当按下这些键时没有调用,也没有“onKeyUp”顺便说一下。 所以我不得不使用“onKeyDown”函数来检测按下这些特定键的时间。
我认为这个问题可能会让其他人感兴趣。
答案 1 :(得分:0)
您需要使用$和^
标记正则表达式中字符串的开头和结尾你的正则表达式应该是
/^[0-9]{1,8}$/
实施例
/^[0-9]{1,8}$/.test("33333333") //returns true
和
/^[0-9]{1,8}$/.test("333333333") //returns false
此外,您需要测试整个输入值,因此请将
else if (!regex.test(this.value)) {
theEvent.returnValue = false;
if (theEvent.preventDefault) theEvent.preventDefault();
}
答案 2 :(得分:0)
您可以将maxlength
属性设置为8
;如果pattern
RegExp
与八位数不匹配,\d{8}
form
属性会input
value
阻止input
提交包含if
条件的RegExp
条件,/\D/
RegExp.prototype.test()
利用""
检查输入是否包含不是数字的字符;如果值不是数字
document.querySelector("input[type=tel]")
.addEventListener("input", function() {
if (/\D/.test(this.value)) {
this.value = "";
alert("eight numbers required")
}
})
<form>
<input type="tel" pattern="\d{8}" maxlength="8" placeholder="input eight numbers" required />
<input type="submit" />
</form>
&#13;
List<KeyValuePair<int, int>>()
Dictionary<int,int>();
&#13;