From cff1d64eda5c7876112bf4b9dcfe779d4dd034f6 Mon Sep 17 00:00:00 2001 From: Rob Emery Date: Thu, 14 Nov 2013 19:51:11 +0000 Subject: [PATCH] RegexCheatSheet.pm: Locking down regex for simple character matches & added tests --- lib/DDG/Goodie/RegexCheatSheet.pm | 2 +- t/RegexCheatSheet.t | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/DDG/Goodie/RegexCheatSheet.pm b/lib/DDG/Goodie/RegexCheatSheet.pm index eab98a026..d84855700 100644 --- a/lib/DDG/Goodie/RegexCheatSheet.pm +++ b/lib/DDG/Goodie/RegexCheatSheet.pm @@ -172,7 +172,7 @@ handle remainder => sub { my $syntax_key = $_; # Let the user provide [a-e], [1-2], nice simple examples only! - if ($_ =~ /\[([a-zA-Z0-9])\-([a-zA-Z0-9])\]/) { + if ($_ =~ /^\[([a-zA-Z0-9])\-([a-zA-Z0-9])\]$/) { return unless are_valid_char_classes($1, $2); #if there are < 3 between them then output all between them, otherwise "0 or 1 .. or 9" style my $range_string = ""; diff --git a/t/RegexCheatSheet.t b/t/RegexCheatSheet.t index 84c069673..ede4fcfe1 100644 --- a/t/RegexCheatSheet.t +++ b/t/RegexCheatSheet.t @@ -38,10 +38,26 @@ ddg_goodie_test( '[M-Y] - Single character range (M or N ... or Y)', html => ' [M-Y] - Single character range (M or N ... or Y)' ), + 'regex [3-5]' => test_zci( + '[3-5] - Single character range (3 or 4 or 5)', + html => ' [3-5] - Single character range (3 or 4 or 5)' + ), 'regex [1-2]' => test_zci( '[1-2] - Single character range (1 or 2)', html => ' [1-2] - Single character range (1 or 2)' ), + 'regex [b-X]' => undef, + 'regex [a-Z]' => undef, + 'regex [Y-E]' => undef, + 'regex [A-a]' => undef, + 'regex [z-a]' => undef, + 'regex [a-1]' => undef, + 'regex [1-a]' => undef, + 'regex [1-1]' => undef, + 'regex [3-2]' => undef, + 'regex [a-]' => undef, + 'regex [4-8] fo sho!' => undef, + 'regex foop [1-3]' => undef, ); done_testing; \ No newline at end of file