Born in Torpoint, Cornwall, Stephens attended Torpoint Community College, and joined Plymouth Argyle in 2005 at the age of 11. He progressed to the club's youth team in 2009 after a number of impressive performances in the junior section of the Milk Cup. He was then promoted to the club's reserve team, having appeared regularly in the Youth Alliance. Stephens began training with the club's first team in September 2010 and was included in an 18-man squad for their league match against Sheffield Wednesday. He made his debut as a late substitute in a 3–2 win for Argyle. Primarily a right back, Stephens can play in a variety of positions. "Jack is a right-back but he can play in the centre as well. He's comfortable in both positions," said John James, the club's youth development officer. "I like him at right-back because he does get forward well, he's quick, he likes to take people on and he's a good header of the ball. He's a big lad – 6ft 1in I think – and he's still growing."
Southampton
He joined Southampton on 5 April 2011 for a fee of £150,000, signing an initial three-year contract, and was placed in the club's development squad. Stephens made his first-team debut for Southampton in a 2–1 FA Cup win against Coventry City on 7 January 2012, coming on as a second-half substitute for Dan Harding. In 2012, he was promoted to the first team ahead of the club's return to the Premier League. On 13 March 2014, Stephens joined League One side Swindon Town on loan until 3 May. He was re-signed on 1 September 2014 on loan until January 2015, and this deal was extended until the end of the season. He scored his first career goal on 17 January 2015, heading Harry Toffolo's cross to open a 3–1 win over Chesterfield at the County Ground. On 31 July 2015, Stephens signed a two-year contract extension, taking his deal to the summer of 2019, and subsequently completed a season-long move to Championship side Middlesbrough. In January 2016 however, he was recalled by manager Ronald Koeman who was not happy that Stephens had only been played in one league match for Boro. On 1 February, Stephens joined League One side Coventry City on loan for the remainder of the season. Stephens made his Premier League debut on 2 January 2017, coming on as a first half substitute replacing the injured Cédric Soares, in a 3–0 defeat at Everton. He scored his first goal for Southampton on 27 January 2018, in the 1–0 victory over Watford in the FA Cup, which was followed by his first Premier League goal four days later, when he equalised in a 1–1 draw with south coast rivals, Brighton. His third goal in as many matches came in a 3–2 victory over fellow strugglers West Bromwich Albion on 3 February.