我正在写一个正则表达式,应与以下谓词匹配:
字母和数字的组合(数字1除外)。
EG:TRS234,A2B3C4、2A3B4C,223GFG
我想出了这个正则表达式:
const regex = /^(?:[^1]+[a-z]|[a-z]+[^1])[a-z][^1]*$/i
除了2A3B4C
以外,几乎所有情况都适用,我已经做了很多研究,但我不明白为什么它不适用于该特定情况。对于改进正则表达式的任何帮助或建议,将不胜感激。
谢谢!
答案 0 :(得分:1)
请注意,[^1]
匹配除1
以外的任何字符,即它也匹配§
,ł
等。此外,[a-z][^1]*
匹配一个字母,后跟1
以外的任何0+字符,因此正则表达式不会验证预期的字符串模式。
您可以使用
const regex = /^(?:[02-9]+[a-z]|[a-z]+[02-9])[a-z02-9]*$/i
或者,一个变体:
const regex = /^(?=[a-z02-9]*$)(?:\d+[a-z]|[a-z]+\d)[a-z\d]*$/i
详细信息
^
-字符串的开头(?:[02-9]+[a-z]|[a-z]+[02-9])
-两者之一:
[02-9]+[a-z]
-除1
以外的1个或多个数字后跟一个字母|
-或[a-z]+[02-9]
-1个或更多字母,后跟1
以外的数字[a-z02-9]*
-除1
以外的0个或多个字母或数字$
-字符串的结尾。