/* * Copyright 2006 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.libideas.validation.client.validator; import com.google.gwt.libideas.validation.client.ErrorHandler; import com.google.gwt.libideas.validation.client.Subject; /** * United States Phone validator. Modifies the output if its "close enough"; */ public class USPhoneValidator extends RegExValidator { static char[] PHONE_FILLERS = {'(', ')', '-', ' '}; static char[] NUMBERS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'}; private static boolean inArray(char a, char[] array) { for (int i = 0; i < array.length; i++) { if (a == array[i]) { return true; } } return false; } public USPhoneValidator() { super("[(][0-9]{3}[)] [0-9]{3}-[0-9]{4}"); } public void checkValid(Subject subject, ErrorHandler handler) { String s = subject.getValue().toString(); if (!s.matches(regEx)) { if (!graunchable(s, subject)) { handler.reportError(subject, createErrorMessage(subject.getLabel(), s)); } } } public String createErrorMessage(String fieldName, String answer) { return getMessages().phone(fieldName, answer); } /** * See if the phone number can be graunched into shape. */ private boolean graunchable(String s, Subject subject) { StringBuffer buf = new StringBuffer(); for (int i = 0; i < s.length(); i++) { char cur = s.charAt(i); if (i == 0 && cur == '1') { continue; } else if (inArray(cur, PHONE_FILLERS)) { continue; } else if (inArray(cur, NUMBERS)) { buf.append(cur); } else { return false; } } if (buf.length() != 10) { return false; } else { buf.insert(0, "("); buf.insert(4, ") "); buf.insert(9, "-"); subject.setValue(buf.toString()); return true; } } }