2014-12-24 71 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}