我想为数字创建一个验证函数,实际上我有那些工作正常,我试图自己创建一个,但不幸的是它没有工作.这是字母数字和其他正常工作:
// Validators
private function custom($validator, $value)
{
return call_user_func($validator, $value, $this->request, $this->id);
}
private function alphanumeric($value, $custom)
{
return preg_match('/^(['.$custom.'a-z0-9_]*)$/i', $value);
}
private function valid_email($value)
{
return preg_match('/^\S+@\S+\.\S+$/', $value);
}
Run Code Online (Sandbox Code Playgroud)
我试图通过修改字母数字来创建的那个:
private function numbers_only($value, $custom)
{
return preg_match('/^(['.$custom.'0-9_]*)$/i', $value);
}
Run Code Online (Sandbox Code Playgroud)
这个怎么了?
编辑:我还有一个JS帮助表单,对于字母数字它是:
Form.prototype.alphanumeric = function(value, custom)
{
return !value.replace(new RegExp('['+custom+'a-z0-9_]', 'ig'), '').length;
};
Run Code Online (Sandbox Code Playgroud)
什么是数字JS?
使用
is_numeric($value);
Run Code Online (Sandbox Code Playgroud)
return是真还是假
如果只需要数字,请$custom从功能中删除该部分.该/i意味着区分大小写的匹配,这是不相关的数字匹配,因此可以被删除.
private function numbers_only($value)
{
return preg_match('/^([0-9]*)$/', $value);
}
Run Code Online (Sandbox Code Playgroud)
上面的表达式将匹配零个或多个数字,因此允许空白输入.至少需要一个号码,改变*到+如
return preg_match('/^([0-9]+)$/', $value);
Run Code Online (Sandbox Code Playgroud)
并且[0-9]+可简写为\d+.由于您没有在匹配数组中捕获值,因此不需要通过包含()捕获组来添加额外开销.这也可以省略.
return preg_match('/^\d+$/', $value);
Run Code Online (Sandbox Code Playgroud)
最后,如果你已经做到这一点并且只匹配整数,那么它就更容易,资源更少:
// If you really intend to match numbers only, and not all numeric values
// which might include .,
function numbers_only($value)
{
return ctype_digit(strval($value));
}
Run Code Online (Sandbox Code Playgroud)