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

时间:2015-12-15 22:09:04

标签: 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 123' => false,
'word2' => false

当它贯穿表达式时。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

当开发人员询问如何过度复杂化他们的正则表达式时,我通常建议他们退后一步,然后编写一些代码,并为他们可以正式化的部分提供正则表达式。

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

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

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

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