Born in Preston, Lancashire, Weir began his career with local club Preston North End before joining the Manchester United academy in 2008. While progressing at the club's academy, he represented England at U16 and U18 level. At one point, Weir was captain of Manchester United's Academy and later the under-21 side. Weir made his UEFA Youth League debut for Manchester United U19 against Bayer Leverkusen, where he started and played for 69 minutes, as they won 4–3. During the tournament, Weir played two matches in the right–back position for the side. However, in the club's second meeting of the tournament against Bayer Leverkusen, on 27 November 2013, he was sent–off in stoppage time for a second bookable offence, as they lost 3–1. In the 2015–16 season, Weir spent months training with the first team players. He was later called to the first team by Manager Louis van Gaal and appeared as unused substitute bench against Newcastle United on 12 January 2016. Weir made his professional debut on 28 February 2016 in a 3–2 Premier League win at home to Arsenal, coming on as an injury-time substitute for Ander Herrera. After making his debut, he spoke out about the development in the first team at the club. Weir later appeared seven times as an unused substitute bench later in the 2015–16 season, as it turned out to be his only appearance. At the end of the 2015–16 season, Weir was offered a new contract by the club.
Instead, on 31 August 2016, Weir signed a three-year contract with Premier League club Hull City. He made his debut on 21 September 2016 in the third round of the League Cup in a 2–1 away win against Stoke City. However, Weir found his first team opportunities limited, as he made two more appearances for the side in the 2016–17 season.
Loan in Wigan
On 31 January 2017, Weir joined Wigan Athletic on loan until the end of the 2016–17 season. Three days later, he made his debut for the club coming on as a substitute in the 67th minute against Sheffield Wednesday. In a follow–up match, Weir made his first starts for Wigan Athletic, where he played 45 minutes before being substituted at half time, in a 2–2 draw against Norwich City. However, Weir was featured less in the first team as the season progressed and went on to make four sporadic appearances for the side.
Return to Hull
He made his league debut for Hull City on the opening day of the 2017–18 season, 5 August 2017, away at Aston Villa, in a 1–1 draw. Weir later reflected the last twelve months as "weird", as he played for three different clubs. He later appeared in three more matches for the side. However, while playing for the club's reserves, Weir suffered a knee injury that kept him out for the rest of the 2017–18 season. By the time he suffered a knee injury, Weir made four appearances in the 2017–18 season. The 2018–19 season saw Weir continuing to recover from his knee injury, but was further sidelined with the same injury he sustained last season. He was released by Hull City at the end of the 2018–19 season.
Bolton Wanderers
On 3 August 2019, Weir signed a one-year contract for a newly relegated EFL League One side Bolton Wanderers and made his debut the same day, in a 2–0 defeat against Wycombe Wanderers. Following this, he began to receive a handful of first team for the side, playing in the midfield position. On 29 October 2019, Weir was subbed off in the first half in an EFL Trophy match against Manchester City U21. Manager Keith Hill criticised Weir for playing badly. His last appearance came on 1 January 2020 against Burton Albion and set up the club's third goal of the game, in a 4–3 loss. With his first team opportunities limited under the management of Hill and the winter arrivals, it was announced on 31 January 2020 that Weir's contract was terminated by mutual consent.
Pohronie
2019–20
On 7 March 2020, Weir signed for Fortuna Liga team Pohronie. It was Weir's first career stop outside England. His debut was delayed due to league postponement caused by the coronavirus pandemic. Weir first appeared in a match for Pohronie on 30 May 2020, during an empty-stadium friendly game ahead of Fortuna Liga restart on 13 June. He scored a first-half goal, setting the score to 2:0. Pohronie won the match 3:1, with the other goals scored by Kojo Matić and Patrik Abrahám, while Ladislav Almási scored Ružomberok's only goal. He did not appear in the away tie, against the same opponent, earlier in the week. Weir made his Fortuna Liga debut on 13 June at pod Dubňom, in the starting line-up against AS Trenčín. Pohronie lost 0:4 in this league restart and the first match of the shortened Relegation Group. Weir was replaced by Cedric Badolo early in the second-half, after just 54 minutes. While Weir played the first game as an attacking midfielder, for the remainder of the campaign he was assigned more defensive roles and contributed to an undefeated run lasting 4 game - equaling the club's top division record from earlier in the season. He scored his first goal in the subsequent away game against iClinic Sereď on 21 June. Pohronie took an early lead thanks to Weir's header, following a cross from Ján Hatok, and were two up 15 minutes in, after another goal by Pavlík. Despite the promising lead Sereď came back and equalised the score in the second half with two goals by Filip Pankarićan and Martin Mečiar. The following week, Weir also recorded an assist in an important 1:0 home win over ViOn Zlaté Moravce, with Patrik Abrahám scoring with a header, following Weir's free kick. Overall, Weir recorded 5 appearances for Pohronie in the 2019–20 season, scoring a single goal.
2020–21
On 25 June 2020 Weir had extended his contract with Pohronie by a year, signing for the upcoming 2020–21 season.