- return $_[0] =~ m!^(?:[A-Z]{1,2}\d+ | \d[A-Z]{1,2}\d+) # basic prefix
- (?:/(?:[A-Z]{1,2}\d+ | \d[A-Z]{1,2}\d+))? # / another one (possibly)
- [A-Z]{1,3} # callsign letters
- (?:/(?:[A-Z]{1,2}\d+ | \d[A-Z]{1,2}\d+))? # / another prefix possibly
- (?:/[0-9A-Z]{1,2})? # /0-9A-Z+ possibly
- (?:-\d{1,2})? # - nn possibly
- $!x;
+ return $_[0] =~ m!^
+ (?:\d?[A-Z]{1,2}\d*/)? # out of area prefix /
+ (?:\d?[A-Z]{1,2}\d+) # main prefix one (required)
+ [A-Z]{1,5} # callsign letters (required)
+ (?:-(?:\d{1,2}|\#))? # - nn possibly (eg G8BPQ-8) or -# (an RBN spot)
+ (?:/[0-9A-Z]{1,7})? # / another prefix, callsign or special label (including /MM, /P as well as /EURO or /LGT) possibly
+ $!x;
+
+ # longest callign allowed is 1X11/1Y11XXXXX-11/XXXXXXX