Born in Southampton, May progressed through Portsmouth's youth categories. He signed a two-year scholarship contract on 4 July 2014. May made his League Two debut on 18 April 2015, coming on as a late substitute for fellow youth graduate Ben Close in a 0–1 home defeat against Bury. On 1 August he signed a one-year professional deal with Pompey, being promoted to the main squad.
In October 2016, May joined National League side Sutton United on loan, initially for one month and later extended to the end of the season. He made his debut for Sutton on 25 October in a 2–2 draw at home against Maidstone United. On 14 January 2017, May scored his first senior goal in an FA Trophy second round away tie against Worthing, a game which ended 2–2; he also scored in the replay on 25 January, netting a vital extra time winner for Sutton, capping a man of the match performance. He was part of the team which knocked out Championship side Leeds United 1–0 in the fourth round of the FA Cup, putting Sutton into the fifth round of the competition for the first time in the club's 118-year history, and appeared in the fifth round tie, a 0–2 defeat to Arsenal on 20 February. On 22 April, May scored his first league goal with a 20-yard strike in a 5–2 victory over Chester. At the end of the season May won the Young Player of the Year award.
2017–18 season
Following his successful loan spell at Sutton United, May played a prominent part in Portsmouth's 2017–18 pre-season, with new manager Kenny Jackett keen to integrate young players into the first-team squad. Due to the departure of club captain Michael Doyle, May began the new season as first-choice midfield partner to Danny Rose in Jackett's preferred 4–2–3–1 formation.
At the start of the 2018–19 season, May signed for Aldershot Town on a loan deal until the 5 December 2018. He made 12 league appearances for the club before being recalled slightly prematurely by Jackett for PompeyEFL Trophyround 2 match against Arsenal U21s on 4 December, in which he hit the upright and the crossbar across both halves. May was awarded man of the match and Portsmouth went on to win the game 2–1.
In June 2019 he joined Swindon Town on loan. He scored his first Swindon goal on his debut in an EFL Trophy tie against Chelsea U21s on 6 August 2019. May was recalled in January 2020.