似乎正则表达式问题很常见,因为每个问题似乎都适用于特定情况。话虽如此,这是我的具体案例......
我需要验证员工ID是否为两种特定格式之一。第一种格式(以及我可靠工作的格式)是(没有引号):“A000000”,其中“A”可以是任何字母字符,“0”可以是0到9之间的任何数字。另一种要求因为这只需要员工ID的前两个位置,这意味着用户可以输入“A0”并且它将进行验证(此员工ID在SQL语句中使用LIKE - ... SID LIKE“A0%”再说一次,我用的是......
[A-Z]{1}\d{1,6}
第二种格式是给我带来麻烦的。同样的要求在上面只有输入字符串的前两个位置是必需的,其他任何东西都是可选的,但如果输入它必须遵守指定的格式。格式为(无引号):“000000A”。我遇到问题的部分是确保如果输入的数字超过两位,则输入的下三到六个数字是数字,如果输入了最后一个数字,那么它必须是一个字符。所以有效的输入可能是......
“00”或“000”或“0000”或“00000”或“000000”或“000000A”,但不是“0”或“0A”或“00A”,或“000A”等,或“ 0000000" 。以下是我目前为此格式所做的...
\d{2}(\d{1,4})?[A-Z]{0,1}
问题在于,这允许在三到六的位置输入字母字符。它不允许在前两个位置使用任何字母字符(好),并且不允许在第七个(最后)位置使用任何数字字符(好)。它只是那些可选的第三到第六个字符,允许字母字符让我感到悲伤。
我希望这是足够的信息(或者可能不是太多)。任何帮助将不胜感激。谢谢!!!
答案 0 :(得分:2)
试试这个表达式:
(\d{2,5}|\d{6}[A-Z]?)
匹配2到5位数字(\d{2,5}
)或6位数字和可选字母(\d{6}[A-Z]?
)。如果您想要完全匹配,请使用^
和$
锚标记开头和结尾:
^(\d{2,5}|\d{6}[A-Z]?)$
答案 1 :(得分:0)
对于第一个,{1}
是多余的:
[A-Z] [0-9] {1,6}
对于第二个,也许这个:
\ d {2} \ d {0,1} \ d {0,1} \ d {0,1} \ d {0,1} [A-Z] {0,1}