解剖
您的正则表达式不只接受字母:
/((\d{1,})(\s{1,})?){1,}/.test('aaa') // false
实际上,如果输入包含至少一个数字,则任何字符都可以接受:
/((\d{1,})(\s{1,})?){1,}/.test('a1a') // true
话虽如此,让我们从你的模式中剔除脂肪:
"{1,}" equals "+" -> ((\d+)(\s+)?)+
"(.+)?" equals ".*" -> ((\d+)\s*)+
useless brackets -> (\d+\s*)+
此结果可以翻译为:“一个或多个数字 (\d+) 后跟零个或多个空格 (\s*)、一个或多个 (()+)、输入中的任何位置”。或者,我们可以说:“至少一个数字,输入中的任何位置”。
您需要将“输入中的任何位置”替换为“从输入的开头到结尾”。以下特殊字符允许这样做:^(输入开始)和$(输入结束)。让我们做一堆测试,看看它们是如何工作的:
requirement regex input .test()
---------------------------------------------------------------------
must contain at least one digit /\d+/ 'a1a' true
must start with at least one digit /^\d+/ '1a' true
must start with at least one digit /^\d+/ 'a1' false
must end with at least one digit /\d+$/ '1a' false
must end with at least one digit /\d+$/ 'a1' true
only digits from the beginning to the end /^\d+$/ '1a1' false
建议
只有可能被一个空格分隔的数字:/^\d+( \d+)*$/。
^ beginning of the input
\d+ a digit, one or more times
( \d+)* a whitespace + same as above, zero or more times
$ end of the input
使用示例:
var r = /^\d+( \d+)*$/;
var isValid = r.test(' 1 '); // false
var isValid = r.test('1 1'); // true
var isValid = r.test('1 1'); // false
更多关于正则表达式:http://www.javascriptkit.com/javatutors/redev.shtml.