Если бы вы могли использовать регулярное выражение, вы могли бы использовать следующее в качестве функции проверки:
function isValid(el) {
return el.match(/^\$?\d+$/);
}
Но так как вы не можете, вот пара альтернативных реализаций. Ключевым моментом является то, что я использовал parseInt
вместо isNaN
, потому что есть угловые случаи: например, 12e1
является действительным числом в научной нотации и, таким образом, это число, а затем использовал Принуждение , чтобы проверить, что вы получите то же значение обратно.
Первый параметр проверяет, как вы вводите, и этого должно быть достаточно.
$('form').on('submit', function(evt) {
if ($('.currency.error', this).length) { // If there are failed fields
evt.preventDefault(); // Prevent submission
}
});
$('.currency').on('input', function() {
if (!isValid(this.value.trim())) {
this.classList.add('error'); // Add error
} else {
this.classList.remove('error'); // Remove if it became valid
}
});
function isValid(el) {
el = el.charAt(0) == '$' ? el.slice(1) : el; // A dollar sign at the beginning is ok
return parseInt(el) == el;
}
.error {
background-color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<input type="text" class="currency" />
<input type="text" class="currency" />
<input type="submit" />
</form>
Второй выполняет проверку только при представлении. Это может быть более надежным для вашего случая, так как это предотвратит отправку пустых полей:
$('form').on('submit', function(evt) {
$fields = $('.currency', this); // Limit field search to the form
$fields.removeClass('error'); // Remove all error classes
let $errors = $fields.filter(function() {
return !isValid(this.value.trim())
});
if ($errors.length) { // If there are failed fields
evt.preventDefault(); // Prevent submission
$errors.addClass('error'); // Mark as failed
}
});
function isValid(el) {
el = el.charAt(0) == '$' ? el.slice(1) : el; // A dollar sign at the beginning is ok
return parseInt(el) == el;
}
.error {
background-color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<input type="text" class="currency" />
<input type="text" class="currency" />
<input type="submit" />
</form>