java phone number validation

后端 未结 4 1851
無奈伤痛
無奈伤痛 2021-01-18 08:13

Here is my problem:

Create a constructor for a telephone number given a string in the form xxx-xxx-xxxx or xxx-xxxx for a local number. Throw an exception if the for

相关标签:
4条回答
  • 2021-01-18 08:46

    So I was thinking to validate it using a regular expression, but I don't know if I'm doing it correctly.

    It indeed looks overcomplicated. Also, matching xxx-xxx-xxxx or xxx-xxxx where x is a digit can be done better with "(\\d{3}-){1,2}\\d{4}". To learn more about regex I recommend to go through http://regular-expressions.info.

    Also what kind of exception would I have to throw? Do I need to create my own exception?

    A ValidatorException seems straight forward.

    public static void isPhoneNumberValid(String phoneNumber) throws ValidatorException {
        if (!phoneNumber.matches(regex)) {
            throws ValidatorException("Invalid phone number");
        }
    }
    

    If you don't want to create one yourself for some reasons, then I'd probably pick IllegalArgumentException, but still, I don't recommend that.

    That said, this validation of course doesn't cover international and/or external telephone numbers. Unless this is really homework, I'd suggest to rethink the validation.

    0 讨论(0)
  • 2021-01-18 08:46

    String pincode = "589877";

        Pattern pattern = Pattern.compile("\\d{6}");
    

    \d indicates the digits. inside the braces the number of digits Matcher matcher = pattern.matcher(pincode);

        if (matcher.matches()) {
            System.out.println("Pincode is Valid");
            return true;
        } else {
            System.out.println("pincode must be a 6 digit Number");
    
    0 讨论(0)
  • 2021-01-18 08:51

    You could match those patterns pretty easily as suggested by BalusC.

    As a side note, StringTokenizer has been deprecated. From JavaDoc:

    StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

    An easier way to split your string into the appropriate segments would be:

    String phoneParts[] = phoneNumber.split("-");
    
    0 讨论(0)
  • 2021-01-18 09:00
    ^(([(]?(\d{2,4})[)]?)|(\d{2,4})|([+1-9]+\d{1,2}))?[-\s]?(\d{2,3})?[-\s]?((\d{7,8})|(\d{3,4}[-\s]\d{3,4}))$
    

    matches: (0060)123-12345678, (0060)12312345678, (832)123-1234567, (006)03-12345678,

    (006)03-12345678, 00603-12345678, 0060312345678

    0000-123-12345678, 0000-12-12345678, 0000-1212345678 ... etc.

    1234-5678, 01-123-4567

    Can replace '-' with SPACE i.e (0080) 123 12345678

    Also matches +82-123-1234567, +82 123 1234567, +800 01 12345678 ... etc.

    More for house-hold/private number. Not for 1-800-000-0000 type of number

    *Tested with Regex tester http://regexpal.com/

    0 讨论(0)
提交回复
热议问题