i create function using event on key up to put "/" inside value from input user using regex but still bug, can someone help me ?
$('#validUntil').on('keyup', function(e){
$(this).val(function(index, value) {
return value
// Add "/" separators:
.replace(/\B(?=(\d{2}) (?!\d))/g, "/")
});
});
for example if i typing 5121 the result must be 51/21. the problem is that the results do not match, the displayed results are : 5/1/21
CodePudding user response:
Welcome to Stack Overflow. Consider the following.
$(function() {
$('#validUntil').on('keyup', function(e) {
var val = $(this).val();
if (val.length > 3) {
$(this).val(val.replace(/\B(?=(\d{2}) (?!\d))/g, "/"));
}
return true;
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="validUntil" />
I suspect the primary issue is that the value is assessed on each keyup event.
Adding a condition to ensure a proper length will help ensure the regex works when it is needed.
Now if the User enters 512111 you will get similar issues. So maybe if / is detected, it is remove and then the regex replacement is applied.
CodePudding user response:
You're adding a slash before the last two numbers in the input, every time its value updates.
So when you are typing:
5 => 5
5 1 => 51 => 51
51 2 => 512 => 5/12
5/12 1 => 5/121 => 5/1/21
When inserting the slash, make sure to remove the previously inserted slash:
return value.replaceAll('/', '')
.replace(/\B(?=(\d{2}) (?!\d))/g, "/")
