2016-09-17 2 views
0

У меня есть сценарий, когда пользователь должен ввести свое имя и фамилию в одном поле, поэтому должно быть пробел между двумя именами, а после пробела должно быть быть по крайней мере персонажем. Я пытался использовать contains(""), но этот метод возвращает true, если пользователь просто вводит пробел и ничего не вводит после этого пространства.Регулярное выражение для имени и фамилии в одном поле

Просьба указать мне способ достижения этого. Я также пытался найти Regular Expression, но не смог найти.

+0

yup, я хочу поставить валидацию на это, если пользователь не вводит ни одной буквы после пробела, я остановлю его – Kirmani88

ответ

0

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

@Test 
public void test_firstAndLastName_success() { 
    Pattern ptrn = Pattern.compile("(\\w+)\\s+(\\w+)"); 
    Matcher matcher = ptrn.matcher("FirstName LastName"); 
    if (matcher.find()) { 
    Assert.assertEquals("FirstName", matcher.group(1)); 
    Assert.assertEquals("LastName", matcher.group(2)); 
    } else { 
    Assert.fail(); 
    } 
} 

Проверка является matcher возвращение false на find.

Если вы не хотите разрешать несколько пробелов (\s+), то либо удалить + (который по-прежнему разрешает для одной вкладки), либо заменить его пробелом.

0

Вы можете использовать такой код:

public static void main(String[] args) throws IOException { 
    String input = "first last"; 
    if (input.matches("[a-zA-Z]*[\\s]{1}[a-zA-Z].*")) { 
     String[] name = input.split(" "); 
     System.out.println(Arrays.toString(name)); 
    } else { 
     System.out.println("Please input the valid name."); 
    } 
} 

Это поставит имя и фамилию на массив, если:

  • [a-zA-Z]* - вход начинается с символов;
  • [\\s]{1} - содержит только один место;
  • [a-zA-Z].* - заканчивается на не менее одного персонажа.
+0

Спасибо, но я хочу поставить валидацию здесь, если пользователь не ввел ни одного слова после пробела, я покажу ему предупреждающее сообщение. – Kirmani88

+0

Я обновил свой ответ. – DimaSan

0

Простой раскол с использованием команды «» будет выполняться после обрезки строки.

Пожалуйста, проверьте код ниже для большего понимания:

String[] splitter = null; 

String s = "abbsd sdsdf"; // string with 2 words and space 

    splitter = s.trim().split(" "); 

    if(splitter.length!=2){ 
     System.out.println("Please enter first or last name"); 
    } 
    else{ 
     System.out.println("First Name : "+splitter[0]); 
     System.out.println("Last Name : "+splitter[1]); 
    } 

    s = "abc"; //string without space 

    splitter = s.trim().split(" "); 

    if(splitter.length!=2){ 
     System.out.println("Please enter first or last name"); 
    } 
    else{ 
     System.out.println("First Name : "+splitter[0]); 
     System.out.println("Last Name : "+splitter[1]); 
    } 

Пожалуйста, проверьте с другими сценариями с и без пространства. Это должно быть полезно.

Смежные вопросы