Das erforderliche Datenformat ist:
1
10
100
1-5
10-50
100-500
0,5
10,5
10,5-20
10,5-20,5
10-20,5
Das heißt, die Größe der für die Verifizierung erforderlichen Zahl ist nicht begrenzt, sie kann Gleitkommazahlen haben oder nicht, sie kann „-“ haben oder nicht, und eine Dezimalstelle bleibt erhalten
Dies ist der reguläre Ausdruck, den ich geschrieben habe:
Die folgende Kopie ist falsch:
var a=/^\d{1,}\.?\d?-?(\d{1,})?\.?\d?$/;
Korrigiert zu:
var a=/^\d{1,}\.?\d{1}?-?(\d{1,})?\.?\d{1}?$/;
Aber warum ist 20,5555 immer wahr?
/^\d{1,}\.?\d?-?(\d{1,})?\.?\d?$/
匹配过程如下:首先
d{1,}
匹配的是"20";\.?
匹配".";\d?
匹配"5",?
匹配了1次;-?
匹配"",因为?
匹配0或者1次,在这里匹配0次;(\d{1,})?
匹配"555",此时?
匹配1次;\.?\d?
匹配"",此时两个?
都匹配0次;$
匹配字符串结尾,所以"20.5555"可以匹配。Update1:
/^\d{1,}\.?\d{1}?-?(\d{1,})?\.?\d{1}?$/
的匹配过程如下:\d{1,}
匹配"20";\.?
匹配".";\d{1}?
会首先尝试匹配一个数字,此时匹配"5",?
匹配1次;-?
会匹配"",此时?
匹配0次;(\d{1,})?
匹配"555";\.?
匹配"",此时?
匹配0次;\d{1}?
匹配"",?
匹配0次;\d{1}
表示数字重复一次,所以该正则和\d
其实是一样的,所以更新后的正则表达式和原先的正则表达式没有区别。注:一开始写的匹配过程有点儿问题,现在已经更新。
???为啥要用正则