我正在写一个正则表达式。此时它允许任意位数:
^(([1-9]*)|(([1-9]*).([0-9]*)))$
如何总共允许 64 位数字?
看到它在行动。
(?=^\d*\.?\d*$)^(\.?\d){64}$
(?=^\d*\.?\d*$) # Can contain maximum one dot in total between digits
^(\.?\d){64}$ # Match exactly 64 digits, dot is optional
第二行使其总共匹配 64 位数字,可以选择任意数量的点。第一行不包括具有多个点的字符串。因此,正则表达式为您提供由 64 位数字和最多 1 个点组成的字符串。
2352352363463456346444651346546213165498546516854985213242135355
.2352352363463456346444651346546213165498546516854985213242135355
235235236346345634644.4651346546213165498546516854985213242135355
235.2352363463456346444651346546213165498546516854985213242135355
23523523634634563464446513465462131654985.46516854985213242135355
235235236346345634644465134654621316549854651685498521324213535
2352352363463456346444651346546213165498546516854985213242135355.
..235235236346345634644465134654621316549854651685498521324213535
..2352352363463456346444651346546213165498546516854985213242135355
23523523.63463456346444651346546213165498.546516854985213242135355
23523523.63463456346444651346546213165498.54651685498521324213535
试试这个正则表达式:
^\d{64}$
但是,如果您需要一个十进制数的精度为 64(正如您的正则表达式所暗示的那样),如下例所示,
235235236346345634644.4651346546213165498546516854985213242135355
235.2352363463456346444651346546213165498546516854985213242135355
23523523634634563464446513465462131654985.46516854985213242135355
小数点前后的位数可能可变,但总计为 64,那么最好使用字符串操作从数字中删除小数点,然后应用上述正则表达式进行验证(或仅验证长度的字符串)。
如果你真的坚持使用正则表达式,你可以试试这个:
^((?:[1-9]\d{63})|(?:(?=[\d.]{65})(?![\d.]{66})(?:[1-9]\d*|0)\.\d*[1-9]))$
分解:
(?:[1-9]{64})
:这涵盖了所有数字,没有小数点。|
: 大逻辑或。(?=[\d.]{65})
:正向前瞻,只允许数字和点,并确保输入的字符总数不少于 65 个。(?![\d.]{66})
:负前瞻,只允许数字和点,并确保输入中的总字符不超过 65 个。(?:[1-9]\d*|0)
: 小数点前的数字不应有前面的零,除非它是唯一的数字。\.
: 强制小数点只出现一次,而不是更多(正如前瞻所允许的那样)。\d*[1-9]
: 确保小数点后的数字不以零结尾。这匹配:
235235236346345634644.4651346546213165498546516854985213242135355
235.2352363463456346444651346546213165498546516854985213242135355
23523523634634563464446513465462131654985.46516854985213242135355
2352352363463456346444651346546213165498546516854985213242135355
0.465168549852132421353551545656456489155456651654654245646564558
2.465168549852132421353551545656456489155456651654654245646564558
并且不匹配:
0352352363463456346444651346546213165498546516854985213242135355
23523523634634563464446513465462131654985.46516854985213242100000
00.46516854985213242135355154565645648915545665165465424564656454
2352352363463456346444651346546213165498546516854985213242
(PS:虽然我不赞成这样做,但尝试起来很有趣。)
我在这个Rubular 链接上测试了不同的输入。
@acheong87 在评论中的积极前瞻帮助我找到了这个正则表达式。
试试这个正则表达式:http ://regex101.com/r/qM9mO8
/^(?:\d{64}|(?=.*\.)(?!.*\..*\.)[\d.]{64})$/gm
此正则表达式适用于 64 个连续数字或 63 个数字和 1 个点。
考虑到你的表情,我想这就是你要找的东西。
祝你好运!