簡體   English   中英

java中的電話號碼驗證

[英]phone Number validation in java

我想以這種方式驗證電話號碼:-

該字段應允許用戶輸入字符並應自動更正。 因此,輸入“+1-908-528-5656”不會為用戶創建錯誤,它只會更改為“19085285656”。

我也想編號范圍在 9 到 11 之間。

我也嘗試了下面的代碼,但沒有得出最終的解決方案:

 final String PHONE_REGEX = "^\\+([0-9\\-]?){9,11}[0-9]$";
 final Pattern pattern = Pattern.compile(PHONE_REGEX);
 String phone = "+1-908-528-5656";      
 phone=phone.replaceAll("[\\-\\+]", "");
 System.out.println(phone);
 final Matcher matcher = pattern.matcher(phone);
 System.out.println(matcher.matches()); 

您可以使用簡單的String.matches(regex)來針對正則表達式模式測試任何字符串,而不是使用PatternMatcher類。

樣本:

boolean isValid = phoneString.matches(regexPattern);

查找更多示例

這是根據您的輸入字符串的正則表達式模式:

\+\d(-\d{3}){2}-\d{4}

在線演示


最好使用Spring 驗證注解進行驗證。

例子

假設您的輸入字段采用任何類型的字符,而您只需要數字。

 String phone = "+1-908-528-5656";
 phone=phone.replaceAll("[\\D]","");
 if(phone.length()>=9 || phone.length()<=11)
   System.out.println(phone);

我們可以使用String.matches(String regex) 1來驗證使用 java 的電話號碼。

示例代碼片段

package regex;

public class Phone {
    private static boolean isValid(String s) {
        String regex = "\\d{3}-\\d{3}-\\d{4}"; // XXX-XXX-XXXX
        return s.matches(regex);
    }

    public static void main(String[] args) {
        System.out.println(isValid("123-456-7890"));
    }

}

PS 當我們在 java 字符串中使用時,我們使用額外的 '\\' 進行轉義的正則表達式模式。 (在java程序中嘗試使用“\\d{3}-\\d{3}-\\d{4}”,會報錯。

// The Regex not validate mobile number, which is in internation format.
// The Following code work for me. 
// I have use libphonenumber library to validate Number from below link.
// http://repo1.maven.org/maven2/com/googlecode/libphonenumber/libphonenumber/8.0.1/
//  https://github.com/googlei18n/libphonenumber
// Here, is my source code.

 public boolean isMobileNumberValid(String phoneNumber)
    {
        boolean isValid = false;

        // Use the libphonenumber library to validate Number
        PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
        Phonenumber.PhoneNumber swissNumberProto =null ;
        try {
            swissNumberProto = phoneUtil.parse(phoneNumber, "CH");
        } catch (NumberParseException e) {
            System.err.println("NumberParseException was thrown: " + e.toString());
        }

        if(phoneUtil.isValidNumber(swissNumberProto))
        {
            isValid = true;
        }

        // The Library failed to validate number if it contains - sign
        // thus use regex to validate Mobile Number.
        String regex = "[0-9*#+() -]*";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(phoneNumber);

        if (matcher.matches()) {
            isValid = true;
        }
        return isValid;
    }

假設您想要優化(這就是您的評論所建議的)。

這個怎么樣? (“0”是排除如果他們給出完整的垃圾,甚至沒有一個數字)。

 int parse(String phone){
     int num = Integer.parseInt("0"+phone.replaceAll("[^0-9]",""));
     return 100000000<=num&&num<100000000000?num:-1;
 }

我不確定但刪除垃圾字符括號、空格和連字符,如果你匹配^((\\+[1-9]?[0-9])|0)?[7-9][0-9] {9}$ ,您可以驗證手機號碼

private static final String PHONE_NUMBER_GARBAGE_REGEX = "[()\\s-]+";
private static final String PHONE_NUMBER_REGEX = "^((\\+[1-9]?[0-9])|0)?[7-9][0-9]{9}$";
private static final Pattern PHONE_NUMBER_PATTERN = Pattern.compile(PHONE_NUMBER_REGEX);

public static boolean validatePhoneNumber(String phoneNumber) {
    return phoneNumber != null && PHONE_NUMBER_PATTERN.matcher(phoneNumber.replaceAll(PHONE_NUMBER_GARBAGE_REGEX, "")).matches();
}

一個簡單易用的 java 手機驗證正則表達式:

public static final String PHONE_VERIFICATION = "^[+0-9-\\(\\)\\s]*{6,14}$";

private static Pattern p;
private static Matcher m;

public static void main(String[] args)
{
    //Phone validation
    p = Pattern.compile(PHONE_VERIFICATION);
    m = p.matcher("+1 212-788-8609");
    boolean isPhoneValid = m.matches();

    if(!isPhoneValid)
    {
        System.out.println("The Phone number is NOT valid!");
        return;
    }
    System.out.println("The Phone number is valid!");
}

我已經為這種電話號碼組合測試了一個正則表達式

(294) 784-4554
(247) 784 4554
(124)-784 4783 
(124)-784-4783
(124) 784-4783
+1(202)555-0138

這個正則表達式肯定適用於所有美國號碼

\d{10}|(?:\d{3}-){2}\d{4}|\(\d{3}\)\d{3}-?\d{4}|\(\d{3}\)-\d{3}-?\d{4}|\(\d{3}\) \d{3} ?\d{4}|\(\d{3}\)-\d{3} ?\d{4}|\(\d{3}\) \d{3}-?\d{4}

基於@k_g 的答案,但針對美國數字。

static boolean isValidTelephoneNumber(String number) {
    long num = Long.parseLong("0" + number.replaceAll("[^0-9]", ""));
    return 2000000000L <= num && num < 19999999999L;
}

public static void main(String[] args) {
    var numbers = List.of("+1 212-788-8609", "212-788-8609", "1 212-788-8609", "12127888609", "2127888609",
            "7143788", "736103355");

    numbers.forEach(number -> {
        boolean isPhoneValid = isValidTelephoneNumber(number);
        log.debug(number + " matches = " + isPhoneValid);
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM