我正在尝试(并且失败)编写一个PHP正则表达式,它将匹配Windows产品密钥,格式为XXXXX-XXXXX-XXXXX-XXXXX-XXXXX(其中X是大写字母或数字).
我已经提出了以下内容,但它没有达到我的预期(假设它实际上可以做我期望的那样!).我认为自己非常精通PHP,但正则表达式对我来说是一个特别的弱点.
([A-Z1-9]{5})-([A-Z1-9]{5})-([A-Z1-9]{5})-([A-Z1-9]{5})-([A-Z1-9]{5})
Run Code Online (Sandbox Code Playgroud)
我实际上是通过ABCDE-FGHIJ-KLMNO-PQRST-UVWXY但是失败ABCDE-FGHIJ-KLMNO-PQRST-UVWXYZ(注意最后一个块有6个字符).
Bonus chatter:是的,我知道并非所有字母在Windows产品密钥中都有效,但重要的是它验证了文本是否以正确的格式输入.
所有你缺少的是你的正则表达式中的位置锚.目前,正则表达式将在字符串中的任何位置匹配该模式.字符串可以是"我的产品密钥是XXXXX-XXXXX-XXXXX-XXXXX-XXXXX,我的名字是鲍勃",你的正则表达式将匹配.你需要的是什么
^([A-Z1-9]{5})-([A-Z1-9]{5})-([A-Z1-9]{5})-([A-Z1-9]{5})-([A-Z1-9]{5})$
Run Code Online (Sandbox Code Playgroud)
本^场比赛唯一的字符串的开头和$仅在最终匹配.