正则表达式仅数字和空格

时间:2014-02-13 11:37:27

标签: javascript regex validation

我有一个文本输入,我要求它只接受数字(0-9)和空格(“”)。 验证此输入的当前正则表达式是:

/((\d{1,})(\s{1,})?){1,}/

代表:一个或多个组基于第一组一个或多个数字和一个可选的第二组一个或多个空格

这只会让我将值引入:999999(仅限数字)或" "(仅限空格)或91 08 8510 903(数字和空格的混合)。 但实际上,我也可以插入aaa或其他字符。

3 个答案:

答案 0 :(得分:2)

解剖

您的正则表达式不接受字母:

/((\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*),一次或多次(()+),< em>输入中的任何地方“。或者,我们可以说:“输入中的任意位置至少有一个数字”。

您需要的是将“输入中的任何位置”替换为“从输入的开头到结尾”。以下特殊字符允许这样做:^(输入开头)和$(输入结束)。让我们进行一系列测试,看看它们是如何工作的:

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

答案 1 :(得分:0)

尝试这个

$pattern = '/^[0-9 ]+$/';

  if ( preg_match ($pattern, $text) )
  {
   echo 'allowed';
  }

答案 2 :(得分:0)

试试这个正则表达式

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

在此处显示结果http://regex101.com/r/dE5uR8

我已使用

在线测试

http://regexpal.com/

上面的正则表达式在开始时不会接受空的空格。你需要至少一位数。如果你想在开始时匹配空格,也把它改为(\ d * \ s * \ d *)+ $,它也会接受空格