我不想使用 split 函数,而是想使用格式为 num * num * num 的 eegular 表达式。
我想验证输入,以便用户只能以 2 * 3 * 4 的格式输入,即 anynumber * anynumber * anynumber。通过使用拆分功能,我成功地做到了这一点。有没有办法在 Javascript 中使用正则表达式来做到这一点?
我不想使用 split 函数,而是想使用格式为 num * num * num 的 eegular 表达式。
我想验证输入,以便用户只能以 2 * 3 * 4 的格式输入,即 anynumber * anynumber * anynumber。通过使用拆分功能,我成功地做到了这一点。有没有办法在 Javascript 中使用正则表达式来做到这一点?
您希望它至少有一个数字,然后是任意数量(任意数量的空格、星号、任意数量的空格,然后是另一个数字)。尝试这个:
^\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
如果您想要小数、负数、前导或尾随空格或任何其他类型的功能,则需要稍微调整模式……但希望这足以让您继续前进!
您可以使用以下方式匹配模式:
此模式匹配单个数字(数字、星号、数字、星号、数字)
^\d\*\d\*\d$
此模式匹配任意长度的数字(数字、星号、数字、星号、数字)
^\d+\*\d+\*\d+$
您还可以使用 \s 标识符允许空格。以下允许数字和符号之间有一个空格:
^\d\s?\*\s?\d\s?\*\s?\d$
这将是您想要的:
^\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+)?)+
会更好。
也许尝试:
document.write("2 * 3 * 4".match(/[0-9]+[\s]?\*[\s]?[0-9]+[\s]?\*[\s]?[0-9]+/));