2015-02-18 7 views
1

Я пытаюсь создать маску для значений, разделенных запятыми, для моих входов, но у меня есть результаты.маска для номеров с запятыми номеров

Помогите мне, ребята?

Вот моя текущая маска:

<script> 
    $(document).on("keyup keydown keypress", "commaseparated", function (e) { 
     if (!$(this).val().match(/^([0-9]{0,1})(,[0-9]{1,}){1,}?$/g)) { 
      e.preventDefault(); 
     } 
    }); 
</script> 
<input type="text" class="commaseparated" /> 
<!-- example input would be 
    1235 <- single number 
    or 
    2654,524874,5456 <- many numbers 
--> 

Заранее спасибо :)

EDIT Ну, это не совсем маска. То, что я хочу, что пользователь может вставить только цифры и запятые, например:

123 -> allowed 
123,123 -> allowed 
123,, -> not allowed 
123,letters -> not allowed 
+1

Что ожидаемый результат? – guest271314

+0

@ guest271314 Я отредактировал вопрос –

ответ

1

Пожалуйста, дайте попробовать на следующей JQuery.

//We need to capture the keypress event, as this is triggered before the value is displayed in the text box. 
$(document).on("keypress", ".commaseparated", function (e) { 
    var currentValue = $(this).val(); 
    //If the value is empty, let user enter numerals. 
    if(currentValue == "" && e.keyCode >= 48 && e.keyCode <= 57) { 
     return true; 
    } 
    else { 
     //If some value is there, get the last character. 
     var lastChar = currentValue.substr(currentValue.length - 1); 

     //If the last character is comma, let user enter numerals. 
     if(lastChar == "," && e.keyCode >= 48 && e.keyCode <= 57){ 
      return true; 
     } 
     //If the last character is comma, deny entering comma again. 
     else if(lastChar == "," && e.keyCode == 44){ 
      return false; 
     } 
     //If the control reaches here and as last character could only be numeral, let user enter only comma or numerals. 
     else if (e.keyCode == 44 || (e.keyCode >= 48 && e.keyCode <= 57)) { 
      return true; 
     } 
     // for everything else, return false. 
     else{ 
      return false; 
     } 
    } 
}); 

Найти jsfiddle here.

+0

интересный. Можете ли вы поместить некоторые комментарии в код, чтобы лучше объяснить это? –

+0

обновлен, посмотрите. –

+0

безупречный! : D Спасибо! –

5

Вы можете использовать RegExp/(,|\D)(?=\1)|^[,\D]|[^,\d]$/g, чтобы соответствовать запятой или нецифровой символ следует запятая или нецифра символ или запятой или неиспользование цифр в начале строки или последнего символ строки не является цифра или запятая, замените матч с пустая строка.

$(".commaseparated").on("input", function(e) { 
 
    $(e.target).prop("value", function(_, val) { 
 
    return val.replace(/(,|\D)(?=\1)|^[,\D]|[^,\d]$/g, ""); 
 
    }) 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
 
</script> 
 
<input type="text" class="commaseparated"/>

+1

Это не работает, потому что '|' не означает 'или' в наборе символов, поэтому регулярное выражение позволяет вводить символы '{', '}' и '|'. Это можно проверить в фрагменте кода. К сожалению, я недостаточно регулярный, чтобы понять правильное регулярное выражение. – Paul

+0

К сожалению, я оставил '+' из списка символов, ошибочно разрешенных в моем комментарии выше ... обнаружил мое упущение через 2 минуты после отключения SO для редактирования комментариев:/ – Paul

+0

@Paul См. Обновленное сообщение. – guest271314

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