0

我不想使用 split 函数,而是想使用格式为 num * num * num 的 eegular 表达式。

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

4

4 回答 4

1

您希望它至少有一个数字,然后是任意数量(任意数量的空格、星号、任意数量的空格,然后是另一个数字)。尝试这个:

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

是任意数量的\d+数字(不包括负数和小数,并以任意数量的零开头),\s*是零个或多个空白字符,并且\*是一个星号(前面有一个退格,因此不会混淆为“零或更多”) . 括号将末尾组合在一起,因此您可以在末尾添加任意数量的括号。您需要添加一个^and$以确保在开始和结束时不会忽略其他随机字符。

您可以使用正斜杠来表示 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

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

于 2013-02-13T05:57:52.727 回答
0

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

此模式匹配单个数字(数字、星号、数字、星号、数字)

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

此模式匹配任意长度的数字(数字、星号、数字、星号、数字)

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

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

^\d\s?\*\s?\d\s?\*\s?\d$
于 2013-02-13T06:00:01.807 回答
0

这将是您想要的:

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

它允许integer*integer*integer在 number 和 之间有零个或多个空格*

要允许小数部分,请使用:

^\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+)?)+

会更好。

于 2013-02-13T06:06:19.737 回答
0

也许尝试:

document.write("2 * 3 * 4".match(/[0-9]+[\s]?\*[\s]?[0-9]+[\s]?\*[\s]?[0-9]+/));
于 2013-02-13T05:57:33.950 回答