Skip to content

Commit db09ffd

Browse files
committed
implementing "regex" format
1 parent d0df6d6 commit db09ffd

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.everit.json.schema.internal;
2+
3+
import java.util.Optional;
4+
import java.util.regex.Pattern;
5+
import java.util.regex.PatternSyntaxException;
6+
7+
import org.everit.json.schema.FormatValidator;
8+
9+
public class RegexFormatValidator implements FormatValidator {
10+
11+
@Override public Optional<String> validate(String subject) {
12+
try {
13+
Pattern.compile(subject);
14+
} catch (PatternSyntaxException e) {
15+
return Optional.of(String.format("[%s] is not a valid regular expression", subject));
16+
}
17+
return Optional.empty();
18+
}
19+
20+
}

core/src/main/java/org/everit/json/schema/loader/SpecificationVersion.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.everit.json.schema.internal.IPV4Validator;
1919
import org.everit.json.schema.internal.IPV6Validator;
2020
import org.everit.json.schema.internal.JsonPointerFormatValidator;
21+
import org.everit.json.schema.internal.RegexFormatValidator;
2122
import org.everit.json.schema.internal.RelativeJsonPointerFormatValidator;
2223
import org.everit.json.schema.internal.TimeFormatValidator;
2324
import org.everit.json.schema.internal.URIFormatValidator;
@@ -158,6 +159,7 @@ private static final List<String> keywords(String... keywords) {
158159
Map<String, FormatValidator> formatValidators = new HashMap<>(V6_VALIDATORS);
159160
formatValidators.put("date", new DateFormatValidator());
160161
formatValidators.put("time", new TimeFormatValidator());
162+
formatValidators.put("regex", new RegexFormatValidator());
161163
formatValidators.put("relative-json-pointer", new RelativeJsonPointerFormatValidator());
162164
V7_VALIDATORS = unmodifiableMap(formatValidators);
163165
}

core/src/test/java/org/everit/json/schema/internal/DefaultFormatValidatorTest.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public void dateTimeWithNineDigitsInSecFracSuccess() {
8989
public void dateTimeWithTenDigitsInSecFracFailure() {
9090
assertFailure("2015-02-28T11:00:00.1234567890Z", new DateTimeFormatValidator(),
9191
"[2015-02-28T11:00:00.1234567890Z] is not a valid date-time. " +
92-
"Expected [yyyy-MM-dd'T'HH:mm:ssZ, yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,9}Z, yyyy-MM-dd'T'HH:mm:ss[+-]HH:mm, yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,9}[+-]HH:mm]");
92+
"Expected [yyyy-MM-dd'T'HH:mm:ssZ, yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,9}Z, yyyy-MM-dd'T'HH:mm:ss[+-]HH:mm, yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,9}[+-]HH:mm]");
9393
}
9494

9595
@Test
@@ -117,7 +117,7 @@ public void dateSuccess() {
117117
public void timeFailure() {
118118
assertFailure("08:30:06 PST", new TimeFormatValidator(),
119119
"[08:30:06 PST] is not a valid time. " +
120-
"Expected [HH:mm:ssZ, HH:mm:ss.[0-9]{1,9}Z, HH:mm:ss[+-]HH:mm, HH:mm:ss.[0-9]{1,9}[+-]HH:mm]");
120+
"Expected [HH:mm:ssZ, HH:mm:ss.[0-9]{1,9}Z, HH:mm:ss[+-]HH:mm, HH:mm:ss.[0-9]{1,9}[+-]HH:mm]");
121121
}
122122

123123
@Test
@@ -179,7 +179,7 @@ public void timeWithNineDigitsInSecFracSuccess() {
179179
public void timeWithTenDigitsInSecFracFailure() {
180180
assertFailure("11:00:00.1234567890Z", new TimeFormatValidator(),
181181
"[11:00:00.1234567890Z] is not a valid time. " +
182-
"Expected [HH:mm:ssZ, HH:mm:ss.[0-9]{1,9}Z, HH:mm:ss[+-]HH:mm, HH:mm:ss.[0-9]{1,9}[+-]HH:mm]");
182+
"Expected [HH:mm:ssZ, HH:mm:ss.[0-9]{1,9}Z, HH:mm:ss[+-]HH:mm, HH:mm:ss.[0-9]{1,9}[+-]HH:mm]");
183183
}
184184

185185
@Test
@@ -290,4 +290,13 @@ public void uriSuccess() {
290290
assertSuccess("http://example.org:8080/example.html", new URIFormatValidator());
291291
}
292292

293+
@Test
294+
public void regexSuccess() {
295+
assertSuccess("([abc])+\\s+$", new RegexFormatValidator());
296+
}
297+
298+
@Test
299+
public void regexFailure() {
300+
assertFailure("^(abc]", new RegexFormatValidator(), "[^(abc]] is not a valid regular expression");
301+
}
293302
}

0 commit comments

Comments
 (0)