2015-08-13 8 views
0

Для моего веб-приложения для бизнеса я хочу, чтобы пользователь мог вводить только допустимые значения валюты в текстовое поле.Ярлык регулярного выражения Javascript replace

В настоящее время я использую

$input.val($input.val().replace(/[^.\d]/g, '')); 

Но это не принимать во внимание того или несколько десятичных сепаратора обеспечивают.

Таким образом, пользователь должен либо ввести целое число или действительное десятичное значение, например:

  • 49,50

Бонусные баллы, если это разрешено также:

  • .50 (для 0.50)

Поэтому я не хочу проверять, я хочу ограничить ввод текста в текстовое поле. Возможно ли это при замене одного регулярного выражения?

+0

http://igorescobar.github.io/jQuery-Mask-Plugin/ – sinisake

+0

Я не хочу использовать какие-либо маскирующие плагины для этого. И да, мне нужна поддержка сафари. – Basaa

+1

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

ответ

0

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

var charCode = (evt.which) ? evt.which : event.keyCode 
if (charCode < 31 && (charCode > 48 || charCode < 57)) 
    return true; 
return false; 

И следующий один за разрешение .:

var charCode = (evt.which) ? evt.which : event.keyCode 
if (charCode == 46 && (charCode > 31 && (charCode < 48 || charCode > 57))) 
    return true; 
return false; 

Следующим шагом будет не допуская двойных периодов.

var charCode = (evt.which) ? evt.which : event.keyCode 
if (charCode == 46 && (charCode > 31 && (charCode < 48 || charCode > 57))) 
    if (charCode == 46 && value.indexOf(".") !== false) 
     return true; 
return false; 

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

Отрывок

Open Deal: разделяй, если вы можете.

function check(inp) { 
 
    var charCode = (event.which) ? event.which : event.keyCode; 
 
    console.log(charCode); 
 
    if (charCode == 8) 
 
    return true; 
 
    if ((charCode > 46 && charCode < 58) || (charCode > 95 && charCode < 106) || charCode == 110 || charCode == 190) 
 
    if (charCode == 110 || charCode == 190) 
 
     if (inp.value.indexOf(".") == -1) 
 
     return true; 
 
     else 
 
     return false; 
 
    else 
 
     return true; 
 
    return false; 
 
}
<input type="text" onkeydown="return check(this);" />

+0

Лучше всего посмотреть на характерный символ, а не на код символа. Значения могут вводиться без нажатия клавиш. – RobG

+0

Да. Но мы можем отключить Paste. @RobG –

+0

Зачем вам отключать вставку? –

0

Это более дружественным к пользователю проконсультировать ошибок и позволить пользователям исправить их самостоятельно. Возможно, вы захотите использовать событие keyup, но слишком рано показывать ошибку (до того, как пользователь имеет возможность ввести допустимое значение) также может раздражать. например

function validate(el) { 
 
    var type = el.className; 
 
    var errEl = document.getElementById(el.name + 'Err'); 
 
    if (type == 'typeCurrency') { 
 
    var currencyRe = /^-?(\d+(\.\d{1,2})?|\.\d{1,2})$/; 
 
    errEl.style.visibility = currencyRe.test(el.value)? 'hidden' : 'visible'; 
 
    } 
 
}
.errorMessage { 
 
    color: red; 
 
    background-color: white; 
 
    visibility: hidden; 
 
    }
Cost&nbsp;<input onblur="validate(this)" name="foo" class="typeCurrency" placeholder="0.00"><br> 
 
<span id="fooErr" class="errorMessage">Please enter a valid cost, e.g. 2.45</span>

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