这个正则表达式有什么问题(如果正则表达式正则表达式)

Raz*_*t4x 5 javascript regex

我想要的是,有一个最大长度为5的文本框.允许的值是..

  1. 任何整数//例如1,3,9,9239都是有效的
  2. 实数,小数点后的一点,例如.1.2,93.7有效且61.37,55.67无效
  3. 也允许在此之后只输入十进制和一位数,即.7是有效输入(将被视为0.7)

我找到了这个页面,http://www.regular-expressions.info/refadv.html
所以我的想法就是这样

  1. 有一个数字
  2. 如果之后有一个数字和一个小数,那么之后必须有一个数字
  3. 如果没有数字,那么必须有一个小数和一个数字

所以,我制作的正则表达式是......

a single digit one or more => /d+  
an optional decimal point followed by exactly one digit => (?:[.]\d{1})?  
if first condition matches => (?(first condition) => (?((?<=\d+)  
then, match the option decimal and one exact digit =>(?((?<=\d+)(?:[.]\d{1})?  
else => |
find if there is a decimal and one exact digit => (?:[.]\d{1}){1}  
check the whole condition globally => /gm
Run Code Online (Sandbox Code Playgroud)

整体表达=>

(?(?<=\d+)(?:[.]\d{1}){1}|(?:[.]\d{1}){1})+/gm
Run Code Online (Sandbox Code Playgroud)

但它没有输出任何东西..
这是小提琴

http://jsfiddle.net/Fs6aq/4/

ps:那里的pattern1和pattern2与我之前的问题有关.

Vic*_*ent 1

您可以尝试以下模式:

/^\d{0,4}\.?\d$/
Run Code Online (Sandbox Code Playgroud)

它似乎满足您的所有要求:

> /^\d{0,4}\.?\d$/.test(".4")
  true
> /^\d{0,4}\.?\d$/.test(".45")
  false
> /^\d{0,4}\.?\d$/.test("1234.4")
  true
> /^\d{0,4}\.?\d$/.test("12345.4")
  false
> /^\d{0,4}\.?\d$/.test("12345")
  true
> /^\d{0,4}\.?\d$/.test("123456")
  false
Run Code Online (Sandbox Code Playgroud)

此模式假设该数字最多可以有五位数字和一个可选的小数点。

如果最大长度 5 包括可选的小数点,则模式会稍微复杂一些:

/^(?:\d{1,5}|\d{0,3}\.\d)$/
Run Code Online (Sandbox Code Playgroud)

该组的第一部分处理所需长度的整数,该组的第二部分处理最大长度(包括小数点)为五的实数。