From ceb63898aba18e71dcd94e67d014214ab8bc7d0e Mon Sep 17 00:00:00 2001 From: Mark Whitaker Date: Wed, 25 Sep 2019 22:40:46 +0100 Subject: [PATCH] Escaped "-" in makeSafeForCharacterClass() --- .../co/mainwave/regextoolbox/RegexBuilder.java | 7 +++++-- .../mainwave/regextoolbox/RegexBuilderTest.java | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/uk/co/mainwave/regextoolbox/RegexBuilder.java b/src/main/java/uk/co/mainwave/regextoolbox/RegexBuilder.java index 17b9280..26119be 100644 --- a/src/main/java/uk/co/mainwave/regextoolbox/RegexBuilder.java +++ b/src/main/java/uk/co/mainwave/regextoolbox/RegexBuilder.java @@ -842,8 +842,11 @@ private void addQuantifier(final RegexQuantifier quantifier) { } private String makeSafeForCharacterClass(final String s) { - // Replace ] with \] - String result = s.replace("]", "\\]"); + String result = s + // Replace ] with \] + .replace("]", "\\]") + // Replace - with \- + .replace("-", "\\-"); // replace ^ with \^ if it occurs at the start of the string if (result.startsWith("^")) { diff --git a/src/test/java/uk/co/mainwave/regextoolbox/RegexBuilderTest.java b/src/test/java/uk/co/mainwave/regextoolbox/RegexBuilderTest.java index e91d8b1..5e589d3 100644 --- a/src/test/java/uk/co/mainwave/regextoolbox/RegexBuilderTest.java +++ b/src/test/java/uk/co/mainwave/regextoolbox/RegexBuilderTest.java @@ -1136,6 +1136,19 @@ public void testAnyCharacterFromWithCaretAtStart() throws RegexBuilderException assertTrue(regex.matcher(Strings.MacAddress).find()); } + @Test + public void testAnyCharacterFromWithHyphen() throws RegexBuilderException { + final Pattern regex = new RegexBuilder() + .anyCharacterFrom("a-f") + .buildRegex(); + + assertEquals("[a\\-f]", regex.toString()); + assertTrue(regex.matcher("a").find()); + assertTrue(regex.matcher("-").find()); + assertTrue(regex.matcher("f").find()); + assertFalse(regex.matcher("c").find()); + } + @Test public void testAnyCharacterFromWithCaretNotAtStart() throws RegexBuilderException { final Pattern regex = new RegexBuilder() @@ -2208,10 +2221,10 @@ public void testUrl() throws RegexBuilderException { .text("s", RegexQuantifier.zeroOrOne()) .text("://") .nonWhitespace(RegexQuantifier.oneOrMore()) - .anyCharacterFrom("a-zA-Z0-9_/") // Valid last characters + .anyCharacterFrom("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_/") // Valid last characters .buildRegex(); - assertEquals("http(?:s)?://\\S+[a-zA-Z0-9_/]", regex.toString()); + assertEquals("http(?:s)?://\\S+[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_/]", regex.toString()); assertTrue(regex.matcher("http://www.mainwave.co.uk").find()); assertTrue(regex.matcher("https://www.mainwave.co.uk").find()); assertFalse(regex.matcher("www.mainwave.co.uk").find());