仅验证数字和点的正则表达式

15

我需要一个能够接受数字和点号的Java正则表达式。

例如:

             1.1.1 ----valid
             1.1   ----valid
             1.1.1.1---valid
             1.    ----not valid

这些点不应该出现在起始位置或者结束位置。


2
".1","1..1","1.11"这些怎么样?你已经尝试过了吗?如果有的话,能否将其发布并解释一下出了什么问题? - Bart Kiers
单个数字是否有效! - Anirudha
没有小数点的数字怎么办?换句话说,小数点是可选的还是必须的? - tripleee
5个回答

56

我想这就是你想要的:

^\d+(\.\d+)*$

解释:它接受由点分隔的数字;以数字开头和结尾;一个数字可以有多个数字位;也接受没有点的单个数字。

不含多个数字位的变体:

^\d(\.\d)*$

至少需要一个点的变体:

^\d+(\.\d+)+$
^\d(\.\d)+$

别忘了在Java中你需要转义\符号,所以代码应该像这样写:

Pattern NUMBERS_WITH_DOTS = Pattern.compile("^\\d+(\\.\\d+)*$");

这对我很有用,我需要获取摘要的索引,所以我修改了它:^(\d+[.\d+]*)。谢谢! - Ivan Joaquim
对于用户输入,我需要在他们键入小数点后的数字之前接受一个字符串,因此我需要接受类似于 1. 的内容。有人能帮忙吗? - conor909
@conor909 假设您也想接受空字符串,则为^(\d+.)\d$ - Viliam Búr

4

您想要一个正则表达式,该表达式要求包含数字和句点,但以数字开头和结尾?

"[0-9][0-9.]*[0-9]"

但是这不能匹配像1这样的内容。它没有任何句点,但是以数字开头和结尾。


这根据您的条件正常工作。 此处的(.\d+)+检查至少包含一个带数字的点。 ^\d+(.\d+)+$\d+ ( . \d+ ) + 开始至少有一个数字,紧接着是一个点,然后至少有一个数字 - Afsar
我尝试在安卓中使用这个,但它仍然允许在开头使用点。 - Shailendra Madda

2

我猜这就是你想要的:

Pattern.compile("(([0-9](\\.[0-9]*))?){1,13}(\\.[0-9]*)?(\\.[0-9]*)?(\\.[0-9]*)?", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.DOTALL | Pattern.MULTILINE);

说明:它接受由点分隔的数字;它以数字开头和结尾;一个数字可以有多个数字位;不接受没有点的数字。

输出结果如下--

  • 1.1
  • 1.12
  • 1.1.5
  • 1.15.1.4

1
<!DOCTYPE html>
<html>
<body>

<p>RegEx to allow digits and dot</p>
Number: <input type="text" id="fname" onkeyup="myFunction()">

<script>
function myFunction() {
    var x = document.getElementById("fname");
    x.value = x.value.replace(/[^0-9\.]/g,"");
}
</script>

</body>
</html>

0
"^\\d(\\.\\d)*$"

1     ----valid (if it must be not valid, replace `*` => `+` )
1.1.1 ----valid
1.1   ----valid
1.1.1.1---valid
1.    ----not valid
11.1.1 ---not valid (if it must be valid, add `+` after each `d`) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接