2015-05-19 2 views
2

У меня есть Regex, который позволяет только буквенно-цифровые символы, наряду с точкой (.) И подчеркивание (_)Regex для не позволяя последовательных точек или подчеркивания

Это не позволяет последовательных символов подчеркивания, но это позволяет последовательные точки. Может кто-нибудь, пожалуйста, проведет меня через эту проблему. Мне не нужны последовательные точки или символы подчеркивания. Ниже функция JavaScript

function checkLogin() { 
    var login = $("#user_login").val(); 
    var regex = new RegExp("^(?!.*__.*)[a-zA-Z0-9_.]+$"); 
    var flag = true; 
    if (regex.test(login)) { 
    $('#valid_character_error').css("display","none"); 
    } 
    else { 
    $('#valid_character_error').css("display","block"); 
    flag = false; 
    } 
    return flag; 
} 
+0

Вы хотите разрешить «a._._._. X»? – nhahtdh

ответ

5

Просто включите шаблон, который соответствует две точки внутри отрицательного предпросмотра.

var regex = new RegExp("^(?!.*(?:__|\\.\\.))[a-zA-Z0-9_.]+$"); 

[a-zA-Z0-9_.]+ будет записана как [\w.]

Update:

var regex = new RegExp("^(?!.*?[._]{2})[a-zA-Z0-9_.]+$"); 

DEMO

+0

, если вы не хотите разрешать '._._._. X', а затем изменить отрицательный lookahead на' (?!. * [._] {2}) ' –

+0

Ваше решение позволяет использовать точки. Я не хочу больше двух последовательных точек или двух подчеркиваний. Также я не хочу разрешать ._._._. X в моем регулярном выражении. –

+0

@AnirudhRautela проверить мое обновление .. –

4

Это должно сделать это

/^([^._]|[.](?=[^.]|$)|_(?=[^_]|$))*$/ 

Значение:

  • ^(...)*$ вся строка равна нулю или-больше ...
  • [^._] полукокса, но без точки или подчеркивание
  • | или
  • [.](?=[^.]|$) точка, за которым следует другой символ или к концу строки (но не «использовать» этот символ)
  • | или
  • _(?=[^_]|$) подчеркивание, а затем другой полукокса или в конце строки (но не «использовать», что символ)

Другими словами, вы ищете последовательность либо:

  • «обычные» символы
  • точки не следует точки
  • подчеркиваний не следуют подчеркивание
3

Если вы не» т хочет __ или .. или ._ последовательности появляться в строке, то это регулярное выражение должно работать:

var regex = /^[a-zA-Z0-9]+([._][a-zA-Z0-9]+)*$/; 

регулярного выражение выше, также отвергают строки, которые начинаются или заканчиваются . или _. Если вы хотите их разрешить:

var regex = /^[._]?[a-zA-Z0-9]+([._][a-zA-Z0-9]+)*[._]?$/; 
Смежные вопросы