Javascript 中的字符串替换为正则表达式十进制验证失败
String Replace with Regex Decimal Validation fails in Javascript
我尝试使用正则表达式限制 string.replace 的用户输入。但它失败了,它不允许输入任何字符。请参阅以下 HTML 页。
<!DOCTYPE html>
<html>
<head>
<title>Decimal Validation</title>
</head>
<body>
<p>A function is triggered when the user is pressing a key and on keyup in the input field.</p>
<input type="text" maxlength="9" onkeyup="myFunction(this)">
<script>
function myFunction(text) {
if(text) {
text.value = text.value.replace(/^(\d{0,4}\.\d{0,5}|\d{0,9}|\.\d{0,8})/g, '');
}
}
</script>
</body>
</html>
我只需要允许数字和精度(即只允许一个点)。如果用户输入只是一个 整数,那么长度应该是 9 或者如果输入只是小数部分那么允许 最大 8 精度 或者如果然后混合物允许 decimal(9,5)
- 允许 4 位数字和 5 位精度。
上面说的正则表达式验证失败,只允许字符为数字和一个句点。
验证和替换是两个不同的任务,您需要先测试字段,然后再用某些东西替换。示例:
function myFunction(text) {
if( !/^(\d{0,4}\.\d{0,5}|\d{0,9}|\.\d{0,8})$/.test(text.value) ) {
text.value = ''; // or an other kind of replacement if you need something
// more precise
}
}
请注意,您也可以像这样重写模式:
/^(?!\d*\.\d*\.)[\d.]{0,9}$/
要将验证模式的字符保留在开头,您可以使用此替换:
text.value = text.value.replace(/^(\d{0,4}\.\d{0,5}|\d{0,9}|\.\d{0,8}).*/, '');
我尝试使用正则表达式限制 string.replace 的用户输入。但它失败了,它不允许输入任何字符。请参阅以下 HTML 页。
<!DOCTYPE html>
<html>
<head>
<title>Decimal Validation</title>
</head>
<body>
<p>A function is triggered when the user is pressing a key and on keyup in the input field.</p>
<input type="text" maxlength="9" onkeyup="myFunction(this)">
<script>
function myFunction(text) {
if(text) {
text.value = text.value.replace(/^(\d{0,4}\.\d{0,5}|\d{0,9}|\.\d{0,8})/g, '');
}
}
</script>
</body>
</html>
我只需要允许数字和精度(即只允许一个点)。如果用户输入只是一个 整数,那么长度应该是 9 或者如果输入只是小数部分那么允许 最大 8 精度 或者如果然后混合物允许 decimal(9,5)
- 允许 4 位数字和 5 位精度。
上面说的正则表达式验证失败,只允许字符为数字和一个句点。
验证和替换是两个不同的任务,您需要先测试字段,然后再用某些东西替换。示例:
function myFunction(text) {
if( !/^(\d{0,4}\.\d{0,5}|\d{0,9}|\.\d{0,8})$/.test(text.value) ) {
text.value = ''; // or an other kind of replacement if you need something
// more precise
}
}
请注意,您也可以像这样重写模式:
/^(?!\d*\.\d*\.)[\d.]{0,9}$/
要将验证模式的字符保留在开头,您可以使用此替换:
text.value = text.value.replace(/^(\d{0,4}\.\d{0,5}|\d{0,9}|\.\d{0,8}).*/, '');