我在网站上有很多HTML输入。它们位于表单内,但表单未提交给服务器。相反,各种输入(数字输入,文本输入和复选框)的值用于最终“拼接”在一起。基于输入和所选选项的产品代码。 (使用JavaScript)
我的问题是:输入数字
<input type='number'/>
仅在服务器端提交时使用数字值,我使用JavaScript检查不同输入的各种值。这允许将字母(字母)字符放入数字输入中。如果您这样做,输入将以红色标出,但它仍然允许将产品代码拼接在一起的功能被调用。
我需要的是一种检测给定字符串是否包含字母字符而不仅仅是数字的方法。我的想法是这样的:
<input type='number' id='inp' />
<script>
input=document.getElementById('inp');
val=input.value;
checkforletters(val);
input.onchange=function(){
if(checkforletters){
//resetting the value to blank if there is an alphabet character in the string
input.value='';
}
}
</script>
您会注意到其中有一个名为
的功能checkforletters()
我还没写过。此函数将检查并查看字符串中是否存在来自输入值的字母字符;如果有,则该函数将返回true。
这个功能是我需要的。如果有字母字符,其余代码会将输入值重置为空白。
总而言之,我需要的是一个函数,当传递一个字符串作为参数时,如果其中有一个字母,则返回true,否则返回false。
请仅使用纯JavaScript。没有jQuery或其他库/框架。
答案 0 :(得分:3)
您可以使用 isNaN() 函数创建自己的函数,以检查给定的字符串是否为数字:
//Will return true if the given string is number, false if is contain characters
function isNumeric(yourString){
return !isNaN(yourString)
}
希望这有帮助。
答案 1 :(得分:3)
我的问题是:虽然数字输入在服务器端提交时只使用数字值,但我使用JavaScript来检查不同输入的各种值。这允许将字母(字母)字符放入数字输入中。如果您这样做,输入会以红色标出,但它仍然允许将产品代码拼接在一起的功能。
您可以使用JavaScript the built in HTML5 constraint validation。这意味着,不必检查值是否有效,该值永远不会无效。
以下示例将禁止用户级别的任何无效输入。它通过检查有效性然后存储值以供将来使用(如果有效)或者如果值无效,则将值设置为先前存储的有效值(如果有),如果不存在则设置为空字符串。
这意味着该值永远无效。
<input type="number"
oninput="(validity.valid&&(dataset['prev']=value))||(value=dataset['prev'])">
&#13;
以下是相同的方法,不使用内联JavaScript
document.getElementById('test').oninput = function() {
if(this.validity.valid) this.dataset['prev'] = this.value;
else this.value = this.dataset['prev'];
}
&#13;
<input type="number" id="test">
&#13;
总而言之,我需要的是一个函数,当传递一个字符串作为参数时,如果其中有一个字母,则返回true,否则返回false。
这意味着无法比较返回的值以检查其有效性,因为如果它实际上无效,则返回的值将为空字符串。
以下示例显示即使该值无效,使用isNaN
进行检查也不会向您显示,此处提及的任何其他方法也不会。
<input type="number" oninput="document.getElementById('value').textContent = value; document.getElementById('isnum').textContent = !isNaN(value)"><br>
Returned Value: <span id="value"></span><br>
Is a number: <span id="isnum"></span>
&#13;
如果你真的想在运行脚本时验证输入元素,那么你可以在那时检查输入元素的有效性。
var test = document.getElementById('test');
document.getElementById('button').onclick = function(e) {
if(!test.validity.valid) {
alert('Its Invalid!');
} else {
alert('Its valid!');
}
}
&#13;
<input id="test" type="number"><button id="button">Check It</button>
&#13;
或者,如果您的输入元素位于表单中,并且您在表单提交事件上运行脚本,它将自动为您验证,并禁止提交,除非该值有效。
var test = document.getElementById('test');
document.getElementById('form').onsubmit = function(e) {
e.preventDefault();
alert("Its valid!"); // this will only happen if the inputs are valid.
}
&#13;
<form id="form"><input id="test" type="number"><button>Check It</button></form>
&#13;
答案 2 :(得分:0)
使用与任何非数字匹配的正则表达式。
var myString = 'aaaaa1';
var reg = new RegExp(/\D+/);
console.log(reg.test(myString));
// true
答案 3 :(得分:0)
检查字符串是否只包含数字(\ d):
function checkforletters(val) {
var pattern = /^\d+$/;
return pattern.test(val);
}
如果您需要数字旁边的其他字符而不是\d
,请使用[\d,-]
(和 - 是您要允许的字符)。
答案 4 :(得分:0)
请使用此功能检查输入中的字母或特殊字符:
checkforletters(val){
var pattern = /[\D]+/
if (pattern.test(val)) {
// val contains a non-digit character, it contains alphabet or special character
}
else{
// val only contains digits
}
}
如果val包含字母,pattern.test(val)将仅返回true
答案 5 :(得分:0)
您可以尝试在开发人员mozilla org的过滤器页面上找到的方法。
function isNumber(obj) {
return obj !== undefined && typeof(obj) === 'number' && !isNaN(obj);
}
当然,您需要稍作修改以制作isString(),您可以尝试typeof(obj)==='string'&& isNaN(obj)。
您可以使用theString.split('')从字符串中获取obj列表
例如:
let s = 'Is this 1 or 2 and not 3 strings? .! : '
let c = s.split('')
let d = c.map((c,i) => {
let v = typeof(c) === 'string' && isNaN(c) ? 'string': 'not-string'
return {c, v}
})
console.log(d)
答案 6 :(得分:-1)
这里是最简单的方法处理onkeyup:(http://jsfiddle.net/vittore/g7xe0drp/)
var inp2= document.getElementById('inp2')
inp2.onkeydown = onlyNumbers
function onlyNumbers(e) {
console.log(e)
if (e.which <=49 || e.which >=57) {
e.preventDefault()
return false;
}
}