package pl.touk.tola.gwt.client.utils;
public class RegexpUtils {
private static final String DECIMAL_SEPARATOR = "\\,";
private static final String ONE_DIGIT_NUMBER = "[0-9]";
private static final String ZERO = "0";
public static final String DECIMAL_REGEXP = "([\\+\\-]|)[0-9]*(\\,[0-9]+)?";
public static String optional(String regexp) {
return "(" + regexp + "|)";
}
public static String alternative(String regexp, String ... alternatives) {
String result = "((" + regexp;
for (String altregexp : alternatives) {
result = result + ")|(" + altregexp;
}
return result + "))";
}
public static String atLeastOnce(String regexp) {
return "(" + regexp + ")+";
}
public static String createRegexpAcceptingPercentWithOptionalPercentSign(boolean allow100, int precisionInPercentForm) {
String fractionPart = createRegexpAcceptingFractionPart(precisionInPercentForm);
String regexpAcceptingNumbersBelow100 = createRegexpAcceptingRepetitions(ONE_DIGIT_NUMBER, 1, 2) + RegexpUtils.optional(fractionPart);
String regexpAccepting100 = "100" + optional(DECIMAL_SEPARATOR + createRegexpAcceptingRepetitions(ZERO, 1, precisionInPercentForm));
String finalRegexp = allow100 ? RegexpUtils.alternative(regexpAccepting100, regexpAcceptingNumbersBelow100) : regexpAcceptingNumbersBelow100;
return finalRegexp + optional("\\%");
}
private static String createRegexpAcceptingRepetitions(String repeatedToken, int minOccurence, int maxOccurence) {
return repeatedToken + "{" + Integer.toString(minOccurence) + "," + Integer.toString(maxOccurence) + "}";
}
private static String createRegexpAcceptingFractionPart(int precision) {
return DECIMAL_SEPARATOR + createRegexpAcceptingRepetitions(ONE_DIGIT_NUMBER, 1, precision);
}
}