PHP正则表达式匹配Windows产品密钥

Ben*_*row 2 php regex

我正在尝试(并且失败)编写一个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产品密钥中都有效,但重要的是它验证了文本是否以正确的格式输入.

Emi*_*ily 9

所有你缺少的是你的正则表达式中的位置锚.目前,正则表达式将在字符串中的任何位置匹配该模式.字符串可以是"我的产品密钥是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)

^场比赛唯一的字符串的开头和$仅在最终匹配.

  • 你可以将它缩短为`^ [A-Z1-9] {5}( - [A-Z1-9] {5}){4} $`. (8认同)