正则表达式而不是使用格式为num * num * num的split函数

时间:2013-02-13 05:53:41

标签: javascript html regex

我想使用格式为num * num * num。

的eegular表达式,而不是使用split函数。

我想验证输入,以便用户只能以2 * 3 * 4的格式输入,即任何数字* anynumber * anynumber。我通过使用split函数成功完成了这项工作。有没有办法在Javascript中使用正则表达式?

4 个答案:

答案 0 :(得分: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

如果你想要小数,负数,前导或尾随空格或任何其他类型的功能,你需要稍微调整模式......但希望这足以让你继续下去!

答案 1 :(得分:0)

也许试试:

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

答案 2 :(得分:0)

您可以使用以下方式匹配模式:

此模式匹配一​​位数字(数字,星号,数字,星号,数字)

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

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

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

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

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

答案 3 :(得分: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+)?)+

会更好。