限制为所有字符还是所有数字?

Restrict to either all characters or all numbers?

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

我希望 'suburb' 通过,因为它全是字母字符,我希望“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);

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

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

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

/^[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

不要简化。当正则表达式更短并匹配更简单的模式时,它们更容易阅读和推理。使用更多的小正则表达式,而不是更少的更长的正则表达式,即使代码可以变得更短。未来你会感谢过去的你让代码更容易理解。