2016-03-18 6 views
0

Мне нужно, чтобы поле не было двойного подчеркивания или пробелов. Я хочу, чтобы ошибка произошла, когда в поле нет совпадения, вместо того, чтобы пытаться найти ошибку. У меня почти есть шаблон, но я все еще не могу предотвратить совпадение, когда строка начинается с двойных подчеркиваний. Вот что у меня есть:Регулярное выражение для исключения символов

(^ (:^\ s) (: ((:?.?!? __ | \ s))) * $)

+0

@Jan Подчеркивание разрешено, только двойные подчеркивания недействительны. –

+0

@DarthAndroid: Правильно, вы ошиблись. – Jan

+0

Попробуйте ['String pattern ="^(?: (?! (?: __ | \\ s)).) * $ "'] (Https://regex101.com/r/cV3cD1/1) –

ответ

0

Try:

^([^_\s]|(_(?!_)))*$ 

Это должно соответствовать любой строке, которая состоит из символов, которые не являются _ или пробелами, и любыми символами, которые являются _, но не сопровождаются _.

0

Насчёт "(\\ s \\ s | __)" ищет только для двойных пространств или двойного подчеркивания:

Pattern reg = Pattern.compile("(\\s\\s|__)"); 

//If the pattern is not found the String is valid 
System.out.println(! reg.matcher(" v a l i d e").find()); 
System.out.println(! reg.matcher("__invalide").find()); 
System.out.println(! reg.matcher("_valide_").find()); 
System.out.println(! reg.matcher("InVALIDE ").find()); 
System.out.println(! reg.matcher("in__va lid").find()); 
+0

Я только нужно знать, есть ли два пробела, не нужно больше соответствовать, что это не будет эффективным. –

0

Вы могли бы придумать что-н. например:

^(?:(?!__|\s{2,}).)+$ 

Это предотвратит сразу два нижних подчеркивания или два пробела. См. a demo on regex101.com.

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