2013-02-13 77 views
0

而不是使用分割函数我想使用格式为num * num * num的eegular表达式。正则表达式,而不是使用格式为num * num * num的分割函数#num

我想验证一个输入,以便用户只能输入2 * 3 * 4的格式,即anynumber * anynumber * anynumber。我通过使用分割功能成功地完成了这项工作。有没有办法在Javascript中使用正则表达式来做到这一点?

+0

我可以这样做'code'函数fun() { } \t \t var dpattern =/\ */i; \t \t \t \t var str = document.getElementById(“name”).value; \t \t var order = dpattern.exec(str); \t \t如果(顺序) \t \t { \t \t \t变种N = str.split( “*”); \t \t \t \t \t \t var a = n [0]; \t \t \t var b = n [1]; \t \t \t var c = n [2]; \t \t \t var d = a * b * c; \t \t \t提醒(d); \t \t \t \t \t \t \t}} 此 – 2013-02-13 05:54:14

回答

0

也许尝试:

document.write("2 * 3 * 4".match(/[0-9]+[\s]?\*[\s]?[0-9]+[\s]?\*[\s]?[0-9]+/)); 
1

块子,你希望它至少有一个号码,然后任意数量的(任意数量的空格,星号,任意数量的空格,然后另一个号码)。尝试:

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

\d+是任何数量的数字(不包括底片和小数和与任意数量的零的开始),\s*是零个或多个空白字符,和\*是一个星号(通过退格之前所以它并不意味着“零或多”)。圆括号将结尾聚集在一起,以便末尾可以有任意数量的结尾。您需要添加一个^$以确保在开始和结束时不会忽略其他随机字符。

您可以使用正斜杠表示在Javascript正则表达式,所以:

var pattern = /^\d+(\s*\*\s*\d)*$/; 
pattern.test("2 * 3 * 4"); // true 
pattern.test("002 * 3* 04"); // true 
pattern.test("2 # 3 # 4"); // false 
pattern.test("2.0 * 3 * 4"); // false 
pattern.test("-2 * 3 * 4"); // false 

如果你想小数,负数,前导或尾随空格,或任何其他类型的功能,你需要调整模式有点...但希望这给你足够的继续!

+0

出来有效期为其他特殊字符也是2#2#2 – 2013-02-13 06:17:12

+0

@Ivin它还传递了 “2#柠檬!宝马”。您可能需要为'test'方法添加'^'和'$'才能使用Javascript。否则,它会找到第一个数字,决定你在圆括号中没有该位的实例,并且仍然返回true。 – 2013-02-13 06:23:57

0

可以使用匹配的模式如下:

这种模式的1位数字(数字,明星,数字,明星,数字)

^\d\*\d\*\d$ 

这种模式匹配任何长度的数字相匹配(数字,星号,数字,星号,数字)

^\d+\*\d+\*\d+$ 

您还可以使用\ s标识符来允许空格。下面让数字和符号之间一个空格:

^\d\s?\*\s?\d\s?\*\s?\d$ 
0

这将是你想要什么:

^\d+\s*\*\s*\d+\s*\*\s*\d+$ 

它允许整数*整数*整数与数之间的零个或多个空格和*

为了允许小数部分,使用:

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

对于负数添加-?以允许可选-像:

^-?\d+(\.\d+)?\s*\*\s*-?\d+(\.\d+)?\s*\*\s*-?\d+(\.\d+)?$ 

^\s*-?\d+(\.\d+)?\s*\*\s*-?\d+(\.\d+)?\s*\*\s*-?\d+(\.\d+)?\s*$允许零个或多个空格之前和之后的表达。为了捕获的数字,用捕捉组:

对于^\s*(-?\d+(\.\d+)?)\s*\*\s*(-?\d+(\.\d+)?)\s*\*\s*(-?\d+(\.\d+)?)\s*$

$1$3$5分别给出了3个数字。

如果不需要捕捉并且要允许两个或多个因素,

-?\d+(\.\d+)?(\s*\*\s*-?\d+(\.\d+)?)+ 

会更好。

+0

由于这是验证输入,我认为他不在乎结果是否可以被捕获 - 解决方案可以推广到任意数量的因素。 – nhahtdh 2013-02-13 06:30:44

+1

' - ?\ d +(\。\ d +)?(\ s * \ * \ s * - ?\ d +(\。\ d +)?)+'会做那个 – 2013-02-13 06:34:53