#!/usr/bin/perl -wl use strict; my @good = qw( 0e0 0 +0 -0 1. 0.14 .14 1.24e5 24e5 -24e-5); my @bad = ('', qw( 2.3. 2.3.4 1..2 .1.1 a.1 a1.1 .1a 1.a 1.1a 1a.1 1.a1)); my $pattern = qr! [+-]? (?: \d*? )? (?: (?<=\d)\.? | \.?(?=\d) ) (?: \d*?)? (?: \d[Ee] (?: [+-]?\d+ ) )? !ox; print 'GOOD Tests'; print /$pattern/ ? ' ': 'no ', "match: '$_'" for @good; print 'BAD Tests'; print /$pattern/ ? ' ': 'no ', "match: '$_'" for @bad;