如何检测 JavaScript 中的字母字符?

How can I detect a letter character in JavaScript?

我在一个网站上有很多 HTML 输入。它们在一个表单中,但表单没有提交给服务器。相反,各种输入(数字输入、文本输入和复选框)的值最终用于 'stitch together' 基于输入和所选选项的产品代码。 (使用 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()

我没写。该函数将检查并查看字符串中是否有来自我输入值的字母字符;如果存在,该函数将 return 为真。

这个功能正是我需要的。如果有字母字符,其余代码会将输入值重置为空白。

所以,总而言之,我需要的是一个函数,当将字符串作为参数传递时,return如果其中有字母则为真,否则为假。

备注

请仅使用纯 JavaScript。没有 jQuery 或其他 libraries/frameworks.

使用匹配任何非数字的正则表达式。

var myString = 'aaaaa1';
var reg = new RegExp(/\D+/); 
console.log(reg.test(myString));
// true

这里是最简单的方法- handle 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;
    }

}

检查字符串是否只包含数字 (\d):

function checkforletters(val) {
    var pattern = /^\d+$/;
    return pattern.test(val);
}

如果您需要数字旁边的其他字符而不是 \d,请使用 [\d,-](和 - 是您希望允许的字符)。

请使用它来检查您输入的字母或特殊字符:

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
    }
}

pattern.test(val) 只有 return true 如果 val 包含字母表

您可以使用 isNaN() 函数创建自己的函数来检查给定字符串是否为数字:

//Will return true if the given string is number, false if is contain characters
function isNumeric(yourString){
    return !isNaN(yourString)
}

希望对您有所帮助。

My problem is this: while the number input only allows a number value when used in a server-side submit, I am using JavaScript to check the assorted values of the different inputs. This allows for a letter (alphabet) character to be put in the number input. IF you do this, the input becomes outlined in red, but it still allows the function that stitches together the product code to be called.

您可以利用 the built in HTML5 constraint validation 和 JavaScript。这意味着不必检查该值是否有效,该值从一开始就永远不会无效。

以下示例将在用户级别禁止任何无效输入。它通过检查有效性然后存储该值以供将来使用(如果有效)来实现这一点,或者如果该值无效,则将该值设置为先前存储的有效值(如果有),否则为空字符串。

这意味着该值永远不会无效。

<input type="number"
       oninput="(validity.valid&&(dataset['prev']=value))||(value=dataset['prev'])">

下面是同样的方法,没有使用内联JavaScript

document.getElementById('test').oninput = function() {  
  if(this.validity.valid) this.dataset['prev'] = this.value;
  else this.value = this.dataset['prev'];
}
<input type="number" id="test">

So, to summarize, what I need is a function that, when passed a string as an argument, returns true if there is an alphabet letter in it, and false otherwise.

如果数字输入的值无效,它将return一个空字符串。

这意味着您 无法比较 returned 值来检查其有效性,因为如果它实际上无效,则 returned 值将是一个空字符串。

以下示例表明,即使值无效,使用 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>

如果你真的想在运行运行你的脚本时验证输入元素,你可以在那个时候检查输入元素的有效性。

var test = document.getElementById('test');
document.getElementById('button').onclick = function(e) {
    if(!test.validity.valid) {
        alert('Its Invalid!');
    } else {
        alert('Its valid!');
    }
}
<input id="test" type="number"><button id="button">Check It</button>

或者,如果您的输入元素在表单内并且您 运行 表单提交事件的脚本,它将自动为您验证,并不允许提交,除非该值有效。

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.
}
<form id="form"><input id="test" type="number"><button>Check It</button></form>

你可以试试这个我在 developer mozilla org 的过滤器页面上找到的。

function isNumber(obj) {
  return obj !== undefined && typeof(obj) === 'number' && !isNaN(obj);
}

array filter

当然你需要稍微修改一下来制作 isString(),你可以试试 typeof(obj) === 'string' && isNaN(obj).

您可以使用 theString.split('')

从字符串中获取对象列表

例如:

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)