Having worked their way into a 17-6 interval lead playing into a strong wind, Wales found themselves down to thirteen men for ten minutes of the second half when they had three players sent to the sin-bin.
The French grabbed their second try with Wales two short to cut the deficit to seven points, but the thin red line held firm and that man Biggar came good at the end to seal victory with a third try.
"We are very happy with the result because we were forced to tough it out in the end and we were good enough to do that," said Wales Coach Simon King. "They won the toss and chose to play with the wind, yet we played our best rugby in the first half. Our scrum was rock solid, our line-out effective and we never conceded an inch to a much bigger side.
"Dan Biggar came up with the points, but back row man Jack Shaw led by example. He simply put his body on the line from start to finish and was the rock on which so many French attacks perished."
The French took the lead with a penalty before Ospreys wing Ryan Bayliss ran in the game's first try. Biggar converted and then added the extra points to a second Welsh try from Scarlets wing Tom Rees.
Biggar responded to a second French penalty with a kick of his own and Wales were 17-6 to the good at the break. The Welsh skipper's boot steered them out of trouble after the French notched their first try almost immediately from the restart and his two penalties meant it was 23-11 moving into the final quarter.
Then came the glut of yellow cards with Rory Pitman, Kristian Dacey and Rees all spending ten minutes in the sin-bin. The second French try came when Wales were down to thirteen men, but Biggar once again came to the rescue.
Firstly, he used the big wind to kick the ball from his own line to a few metres out from the French line, and then he rewarded his forwards for stealing the line-out by crossing at the posts for a try which he also converted.
Wales go on to play England and Scotland in their remaining matches in the tournament.
James Loxton (Llandaff/Blues)
Tomos Rees (Llandybie/Scarlets)
Jason Tovey (Newport/Dragons)
Ashley Beck (Neath/Ospreys)
Ryan Bayliss (Pelenna/Ospreys)
Dan Biggar (Gowerton/Ospreys)
Rhys Downes (Rhydyfelin/Blues)
Tom Price (Builth Wells/Blues)
Rhys Williams (Blues)
Scott Andrews (Llantrisant/Blues)
Lee Bray (Blackwood/Dragons)
Ashley Sweet (Pontypool United/Dragons)
Kristian Dacey (Merthyr/Blues)
Jack Shaw (Bridgend Athletic/Ospreys)
Rory Pitman (Ospreys)
Aaron Coundley (Blackwood/Dragons)
Ricky Guest (Llanelli/Scarlets)
Stewart Maguire (Chepstow/Dragons)
Jake Thomas (Ynysybwl/Blues)
Justin Tipuric (Trebanos/Ospreys)