2013-11-13 2 views
0

Я пытаюсь проверить номер телефона в формате; xxx-nnn-yyyy Вышло следующее сообщение, и я не могу понять, почему он не работает. Кажется, что \ b ошибочно. Спасибо за любую помощь/предложение/исправление/направление туда, где подобная проблема описана так, как я пока не смог найти.java.util.regex.PatternSyntaxException: at b в regexp

/AndroidRuntime(3143): Caused by: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 6: 
    /AndroidRuntime(3143): ^\\(?([0-9]{3})\\)?[-]?([0-9]{3})[-]?([0-9]{4}) 
    /AndroidRuntime(3143):  ^
    /AndroidRuntime(3143): at java.util.regex.Pattern.compileImpl(Native Method) 

    temp = phone.getText().toString(); 
    if (temp.length() == 0) { 
    Toast.makeText(getApplicationContext(), "Phone number is missing", Toast.LENGTH_SHORT).show(); 
    }else { 
    Log.i(TAG, "Matching Phone Short"); 
    Pattern p = Pattern.compile("^\\\\(?\b([0-9]{3})\\\\)?[-]?([0-9]{3})[-]?([0-9]{4})\b"); 
    Matcher m = p.matcher(temp) ; 
    if (m.find()){ 
    Log.i("RC OK", "ret code GOOD");  
    }else{ 
    Log.i("RC NOK", "ret code BAD");  
    } 

ответ

2

Ваше регулярное выражение неверно:

Pattern p = Pattern.compile("^\\\\(?\b([0-9]{3})\\\\)?[-]?([0-9]{3})[-]?([0-9]{4})\b"); 

Поскольку нет никакого действительного идентификатора после (?, также \b должен быть \\b

Попробуйте это:

Pattern p = Pattern.compile("^\\\\(?:\\b([0-9]{3})\\\\)?[-]?([0-9]{3})[-]?([0-9]{4})\\b"); 
Смежные вопросы