Write a program or function which takes a string input as a function parameter or from stdin and determines if it is a valid FEN string.
You can assume the input will only ever include the following characters (case sensitive)
The length of the input will always be a minimum of 1 character and a maximum of 100 characters
Output should be a truthy/falsey value. These can be any values you wish as long as they are consistent (all truthy results have the same output, all falsey results have the same output). You should have exactly two distinct possible outputs.
What counts as valid
Lowercase letters represent black pieces, uppercase letters represent white pieces.
You should ensure it is possible in a game of chess for the pieces in the current position to exist.
Each player will always have exactly 1 king (k/K)
Each player may have no more than 8 pawns (p/P)
Each player will usually have no more than 1* queen (q/Q)
Each player will usually have no more than 2* rooks (r/R)
Each player will usually have no more than 2* knights (n/N)
Each player will usually have no more than 2* bishops (b/B)
* It is legal for a player to 'promote' a pawn to any of these four pieces.
The total of pawns, queens, rooks, knights and bishops for each player will never be more than 15
The total number of pieces plus empty squares (denoted by numbers) should always add up to exactly 8 for each rank. And there should always be exactly 8 ranks, separated by a forward slash.
Things you can ignore
You do not need to concern yourself with whether or not it is possible to play into the position denoted, or if the position is legal, only that the pieces can exist in the quantities given.
You can ignore further complexities of FEN strings such as player turn, castling rights and en passant.
This is code golf. Shortest program in bytes wins. Usual loopholes and rules apply.
(black has 7 pawns and 4 rooks - impossible)
Output False (only 7 ranks)
Output False (9 ranks)
Output False (2nd rank has 9 squares/pieces)
Thanks to Feersum and Arnauld for clarifying this case (3+5=8)