2014-12-24 112 views
3

我想驗證一個電話號碼,以這種方式: -在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()); 
+0

你現在的代碼有什麼問題?你不能用'{9,11}'替換'{9,10}'來解決你的問題嗎? –

+1

如果你得到這個工作,你會惹惱別人。 – Jasen

+0

其作品,但代碼沒有優化,應該有一個最好的(它可以在一行中完成)的方式來做到這一點。 – Devendra

回答

5

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

樣品:

boolean isValid = phoneString.matches(regexPattern); 

Find more examples

這裏是正則表達式按您的輸入字符串:

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

Online demo


更好地使用Spring validation annotation進行驗證。

Example

+0

你能告訴我phoneString.matches(regexPattern);和Matcher matcher = pattern.matcher(phone); matcher.matches() – Devendra

+1

'String.matches(regex)'用於匹配**整個**字符串,而模式和匹配器也可用於匹配子字符串。要使用模式和匹配器匹配整個字符串,您必須使用'^'和'$'分別匹配字符串的開始和結束。 – Braj

0

假設你想優化(這是你的意見提出了什麼)。

這是怎麼回事? (如果他們給出完整的垃圾,甚至沒有一個數字,那麼「0」將被排除)。

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

假設您的輸入字段採取任何類型的字符,你只是想要的數字。

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

我不知道,但去除垃圾字符括號,空格和連字符,如果你有^((\ + [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(); 
} 
0

我們可以使用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")); 
    } 

} 

附:我們在java字符串中使用額外'\'來轉義正則表達式模式。 (嘗試在java程序中使用「\ d {3} - \ d {3} - \ d {4}」,您將收到錯誤消息。

1
// 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

一個簡單的,簡單易用的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!"); 
} 
0

我做了測試一個正則表達式的電話號碼

(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}