exposed ports numeric validation

[finishes: #77123572]
and then use `attribute` here instead of hard-coding `:expose` and genericize the message.

Also you probably want to abort the `.each` after you find one bad item -- otherwise you might end-up with duplicate errors reported.