正则表达式为两个或三个字符串,其中0或1可能是一个数字

时间:2016-06-16 17:45:46

标签: regex

什么是匹配长度为两个或三个字符的字符串的正则表达式,其中最多一个字符是一个数字,其余字母是字母?

匹配输入的示例:

T4
T4T
4TT
TT

不匹配输入的示例:

T
T44
T4TT
_4_

3 个答案:

答案 0 :(得分:2)

使用负面预测断言最多1位数:

^(?!.*\d.*\d)[^\W_]{2,3}$

说明:

  • (?!.*\d.*\d)表示"断言在此之后有 2位"
  • \W表示"非单词字符" - 一个"字符"是任何字母,数字或下划线。这与\w相反,这意味着"一个单词字符"。 \W[^\w]
  • 相同
  • [^\W_]表示"既不是非单词字符也不是下划线"它与[0-9a-zA-Z]相同,但写入时间更短
  • {2,3}表示"在前一个词的2到3(含)之间"

我非常确定这是最短的解决方案。

请参阅live demo与您的测试用例。

答案 1 :(得分:1)

您可以将正则表达式与positive look ahead

一起使用
/^(?=[a-z\d]{2,3}$)[a-z]{0,3}\d?[a-z]{0,3}$/i

Regex explanation here.

{{0}}

答案 2 :(得分:1)

使用否定预测,您可以使用此正则表达式:

^(?![a-zA-Z]*\d+[a-zA-Z]*\d)[a-zA-Z\d]{2,3}$

RegEx Demo

    如果输入中有超过1位数,则
  • (?![a-zA-Z]*\d+[a-zA-Z]*\d)为使比赛失败的负面预测
  • [a-zA-Z\d]{2,3}将匹配由字母和数字组成的2或3个字符。