I tried a number of other solutions to no avail, so I came up with this.
^(-?\d+)\.?\d+(e-|e\+|e|\d+)\d+$

Demo version of Debuggex
Anything that matches is considered valid Scientific Notation.
Note: this accepts e+ , e- and e ; if you do not want to accept e , use this: ^(-?\d+)\.?\d+(e-|e\+|\d+)\d+$
I'm not sure if it works for C ++, but in C # you can add (?i) between ^ and (- in the regular expression to switch the built-in case insensitivity. Without it, exponentials declared as 1.05E+10 , will not be recognized.
Edit: My previous regex was a bit of a mistake, so I replaced it with the previous one.
XtraSimplicity
source share