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

I am attempting (and failing) to write a PHP regex that will match a Windows product key in the form XXXXX-XXXXX-XXXXX-XXXXX-XXXXX (where X is an uppercase letter or a number).

I have come up with the following, but it is not doing quite what I expect (provided it actually can do what I expect!). I consider myself pretty well versed in PHP, but regexes are a particular weak point for me.

([A-Z1-9]{5})-([A-Z1-9]{5})-([A-Z1-9]{5})-([A-Z1-9]{5})-([A-Z1-9]{5})

What I am actually after is it to pass ABCDE-FGHIJ-KLMNO-PQRST-UVWXY but to fail ABCDE-FGHIJ-KLMNO-PQRST-UVWXYZ (notice the last block has 6 characters).

Bonus chatter: Yes, I know that not all letters are valid in a Windows product key, but the important bit is that it validates the text has been entered in the correct format.

All you're missing is position anchors in your regex. Currently, the regex will match that pattern anywhere in a string. The string could by "my product key is XXXXX-XXXXX-XXXXX-XXXXX-XXXXX and my name is Bob" and your regex would match. What you need is

^([A-Z1-9]{5})-([A-Z1-9]{5})-([A-Z1-9]{5})-([A-Z1-9]{5})-([A-Z1-9]{5})$

The ^ matches only the beginning of the string and $ matches only the end.