我有一个文本输入,我要求它只接受数字(0-9)和空格(“”)。 验证此输入的当前正则表达式是:
/((\d{1,})(\s{1,})?){1,}/
代表:一个或多个组基于第一组一个或多个数字和一个可选的第二组一个或多个空格
这只会让我将值引入:999999
(仅限数字)或" "
(仅限空格)或91 08 8510 903
(数字和空格的混合)。
但实际上,我也可以插入aaa
或其他字符。
答案 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
我已使用
在线测试上面的正则表达式在开始时不会接受空的空格。你需要至少一位数。如果你想在开始时匹配空格,也把它改为(\ d * \ s * \ d *)+ $,它也会接受空格