Javascript 数字、小数和分数的正则表达式
如何创建允许整数、小数、分数和带小数的分数的正则表达式? 字符串也可以有可选文本,仅在末尾。 到目前为止,我有:Javascript 数字、小数和分数的正则表达式,javascript,regex,Javascript,Regex,如何创建允许整数、小数、分数和带小数的分数的正则表达式? 字符串也可以有可选文本,仅在末尾。 到目前为止,我有: const re = /^\d*\.?\d*\/?\d*\.?\d*[a-z]*$/gi; 这允许在整数中使用双小数(即:“23.23.23”),这是我不想要的。我是否可以修改此正则表达式,使其仅在用“/”分隔时才允许使用两个小数点 以下是一些可以通过的示例: 23.23/100公里 1/3 .23公里 1.4英里 1.2/2.1kg 一些不应该通过的示例: 1A3公里 12
const re = /^\d*\.?\d*\/?\d*\.?\d*[a-z]*$/gi;
这允许在整数中使用双小数(即:“23.23.23”),这是我不想要的。我是否可以修改此正则表达式,使其仅在用“/”分隔时才允许使用两个小数点
以下是一些可以通过的示例:
- 23.23/100公里
- 1/3
- .23公里
- 1.4英里
- 1.2/2.1kg
- 1A3公里
- 12.12.12
- 1.2.3/12.13公里
- 12公里/12.44公里
^(?。.*\d+(?:\.\d+{2})\d*\.?\d*\/?\d*\.?\d*.[a-z]*$
看。由于(?!.*\d+(?:\。\d+{2})
负前瞻,此表达式不允许三个相互之间有句点的数字
解释
--------------------------------------------------------------------------------
^字符串的开头
--------------------------------------------------------------------------------
(?!向前看,看看是否有:
--------------------------------------------------------------------------------
.*除\n(0次或多次)以外的任何字符
(匹配尽可能多的金额)
--------------------------------------------------------------------------------
\d+数字(0-9)(1次或多次(匹配
尽可能多的钱)
--------------------------------------------------------------------------------
(?:组,但不捕获(2次):
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
\d+数字(0-9)(1次或多次
(匹配尽可能多的金额)
--------------------------------------------------------------------------------
){2} 分组结束
--------------------------------------------------------------------------------
)展望的结束
--------------------------------------------------------------------------------
\d*数字(0-9)(0或更多次(匹配
尽可能多的钱)
--------------------------------------------------------------------------------
\.? '.' (可选)(与最大金额匹配)
(可能的)
--------------------------------------------------------------------------------
\d*数字(0-9)(0或更多次(匹配
尽可能多的钱)
--------------------------------------------------------------------------------
\/? '/' (可选)(与最大金额匹配)
(可能的)
--------------------------------------------------------------------------------
\d*数字(0-9)(0或更多次(匹配
尽可能多的钱)
--------------------------------------------------------------------------------
\.? '.' (可选)(与最大金额匹配)
(可能的)
--------------------------------------------------------------------------------
\d*数字(0-9)(0或更多次(匹配
尽可能多的钱)
--------------------------------------------------------------------------------
[a-z]*从'a'到'z'(0或更多)的任何字符
次数(匹配尽可能多的数量))
--------------------------------------------------------------------------------
$在可选的前\n和
一串
这应该行得通
^[0-9]*(?:\.[0-9]*)?(?:\/[0-9]*(?:\.[0-9]*)?)?[a-zA-Z]*$
您尝试的模式由所有可选部分组成,因为所有量词要么是
?
表示可选,要么是*
表示0次或更多次。由于/
也是可选的,因此您将匹配12.12.12
您可以使带有/
部件的部件成为可选部件,而不必使/
本身成为可选部件
如果您希望至少匹配一个数字并防止匹配空字符串,则可以使用正向前瞻来匹配至少一个数字
^(?=[^\d\r\n]*\d)\d*\.?\d*(?:\/\d*\.?\d*)?[a-z]*$
模式匹配
字符串的开头^
至少声明一个数字(?=[^\d\r\n]*\d)
匹配可选数字和\d*\.?\d*
非捕获组(?:
匹配\/\d*\.?\d*
和可选数字和/
关闭非捕获组并将其设置为可选)?
可选择匹配字符a-z[a-z]*
字符串结尾$
如果
/
的每一侧至少有一个数字不匹配,例如/
^(?:\d*\.?\d+|\d+\.)(?:\/\d*\.?\d+|\d+\.)?[a-z]*$
模式匹配
字符串的开头^
匹配可选数字、可选(?:\d*\。?\d+\d+\)
和1+数字或匹配1+数字和
非捕获组(?:
匹配\/\d*\?\d+\d+\.
,并再次与第一个模式相同/
关闭非捕获组并将其设置为可选)?
可选择匹配字符a-z[a-z]*
字符串结尾$
如果数据不正确,是否应该允许数字和单位之间有空格