2015-06-17 2 views
0

Так что мне нужно определить, что имя пользователя находится в формате firstname.lastname Он не может иметь точек в начале или в конце, поэтому у него также не может быть пробелов. Im использует Perl5Util matcher для соответствия строкам в Java.Регулярное выражение для определения точки в начале или в конце

Каков наилучший способ сделать это в регулярном выражении?

Я использовал [A-Za-z0-9\\.], но, к сожалению, это определяет точки в начале и конце.

private static final String ALPHANUMERIC = "[A-Za-z0-9\\.]"; 
private static final String USERNAME_PATTERN = "/^" + ALPHANUMERIC + "+$/"; 

public static boolean isValidUsername(final String username) { 
    final Perl5Util userMatcher = new Perl5Util(); 
    return userMatcher.match(USERNAME_PATTERN, username); 
} 

ответ

1

Чтобы обнаружить точку в начале или в конце вы можете использовать регулярные выражения, как это:

^\.|\.$ 

Однако, вы можете также использовать под регулярное выражение, чтобы соответствовать строки, содержащие точки в середине:

^\w+(\.?\w+)*$ 

с помощью этого вы можете иметь несколько точек в середине, как some.thing.too

Working demo

enter image description here

В случае, если вы только хотите, чтобы проверить формат some.thing, когда вы можете использовать это:

^\w+\.?\w+$ 

Имейте в виду, что \w является аббревиатурой для [A-Za-z0-9_], так если вы хотите избавиться от _, вы можете изменить его на:

(?i)^[a-z]+\.?[a-z]+$ 
^-- insensitive flag 
+0

Будет ли символ трубы заставлять это разрешать '.foo', так как он соответствует второй альтернативе? – hexafraction

+0

Это отвечает на вопрос, но не вопрос. – ruakh

+0

@ruakh извините, я редактировал :) –

2

Вы не могли соответствовать на

[A-Za-z0-9]+\.[A-Za-z0-9]+ 
+0

Спасибо, что работает. Если я хочу совместить другой формат, скажите firstnamelastname, я попробовал^([a-zA-Z0-9] + \. [A-zA-Z0-9] +) | ([a-zA-Z0-9]) + $ , но это действительно не работает, когда его .firstnamelastname. Во всяком случае, вокруг этого? – nixgadgets

+0

вы говорите, что вы _do_ хотите '.' в начале? – Reimeus

+0

нет, что я имею в виду, нет точки посередине. Но это должно быть недействительным, если есть точка в начале или в конце. – nixgadgets

0

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

return username.matches("[A-Za-z0-9][A-Za-z0-9.]*[A-Za-z0-9]"); 

Нет необходимости, чтобы избежать точка в классе символов.