Javascript 限制为所有字符或所有数字?

Javascript 限制为所有字符或所有数字?,javascript,regex,string,expression,Javascript,Regex,String,Expression,假设我想限制用户输入郊区或邮政编码,但不能同时输入两者 我想让“郊区”作为字母字符传递,我想让“1234”作为数字传递,但我不知道如何映射,或者在正则表达式中 这是我试过的 var string = 'word'; var resultA = !(string.match(/^[a-z|0-9]+$/i)); alert(resultA); 因此,我需要: 'word' => true '1234' => true 'word word' => true, 'word

假设我想限制用户输入郊区或邮政编码,但不能同时输入两者

我想让“郊区”作为字母字符传递,我想让“1234”作为数字传递,但我不知道如何映射,或者在正则表达式中

这是我试过的

var string = 'word';

var resultA = !(string.match(/^[a-z|0-9]+$/i));

alert(resultA);
因此,我需要:

'word'  => true
'1234'  => true
'word word' => true,
'word 123' => false,
'word2' => false

当它在表达式中运行时。

您可以使用此正则表达式匹配输入中的字母或数字:

var resultA = /^([A-Za-z]+|[0-9]+)$/.test(string);

当开发人员询问如何使正则表达式过于复杂时,我通常建议他们后退一步,只编写一些代码,并为他们能够很好地形式化的部分加入regex

您询问如何确定字符串是完全字母字符还是完全数字

用于检测所有字母字符的正则表达式是

/^[a-z]*$/i
/^\d*$/
用于检测所有数字字符的正则表达式是

/^[a-z]*$/i
/^\d*$/
将它们结合起来就是:

function valid(str) {
  return /^[a-z]*$/i.test(str) || /^\d*$/.test(str);
}
现在,如果要将所有内容组合成一个正则表达式,只需使用
正则表达式操作:

function valid(str) {
  return /^[a-z]*$|^\d*$/i.test(str);
}
如果使用分组运算符,当然可以简化此操作:

/^([a-z]*|\d*)$/i

不要简化它。当正则表达式较短且匹配更简单的模式时,它更容易阅读,也更容易推理。使用更多的小正则表达式,而不是更少的长正则表达式,即使代码可以缩短。将来您将感谢过去的您使代码更容易理解。

谢谢!,如果我想在单词之间留空格?所以,如果我有“某个地方”,我也希望它能成功!然后你可以使用:
/^([A-Za-z]+(?:[A-Za-z]+)*|[0-9]+)$/
你最好只在允许的字符中添加空格作为
[A-Za-z]
,这是不正确的,因为
[A-Za-z]
也会用空格来匹配输入。这是一个很好的观点@stribizev,我如何适应它?@ShannonHochkins,似乎你忘记了邮政编码有时有连字符,郊区有时有句点。您可能需要重新考虑将真正不需要正则表达式匹配的内容形式化。