最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 不使用正则进行英文数字等相关字符的规则校验

    正文概述 转载于:掘金(硬核项目经理)   2021-03-19   578

    在一些场景中,比如说注册登录的时候,我们会对用户名做一些限制,比如只能是数字和字母的组合。一般情况下,我们会使用正则表达式来完成这样的功能,不过,php其实已经帮我们准备发了几个函数来处理这样的情况。

    ctype_ 相关函数

    // 数字和字母,不包含浮点数, [A-Za-z0-9]
    if(ctype_alnum($input)){
        echo $input, '是英文数字的组合字符!', PHP_EOL;
    }
    
    // 英文字母, [A-Za-z]
    if(ctype_alpha($input)){
        echo $input, '是英文字母!', PHP_EOL;
    }
    
    // 数字字符,不包含浮点数、负数(无符号正整数)
    if(ctype_digit($input)){
        echo $input, '是数字字符!', PHP_EOL;
    }
    

    上面三个函数分别分就的就是数字+字母、纯字母、纯数字的三种字符类型的判断。没错,关于这种判断我们使用的正是 ctype_ 开头的这些函数。在这其中,唯一需要注意的是 ctype_digit() 进行数字判断时,返回 true 的情况只能是无符号、无小数点的正整数,也就是说负数和小数也是无法通过这个函数的判断的。我们在文章的最后还会看一下 ctype_digit() 和 is_numeric() 有什么区别。

    当然,ctype_ 相关的函数不止这三个,还有很多,我们再来看一组。

    // 小写字母
    if(ctype_lower($input)){
        echo $input, '是小写字母字符!', PHP_EOL;
    }
    
    // 大写字母
    if(ctype_upper($input)){
        echo $input, '是大写字母字符!', PHP_EOL;
    }
    
    // 所有可打印字符
    if(ctype_print($input)){
        echo $input, '是可打印字符!', PHP_EOL;
    }
    
    // 所有字符都是可见的,除了空格或者格式控制这些不可见的
    if(ctype_graph($input)){
        echo $input, '是可打印字符,除空白字符!', PHP_EOL;
    }
    
    // 不包含空白、字母、数字的可打印字符 英文标点符号类
    if(ctype_punct($input)){
        echo $input, '是不包含空白、字母、数字的可打印字符!', PHP_EOL;
    }
    

    ctype_lower() 和 ctype_upper() 是判断字符串中的内容是否全都为小写或大写。记住,满足条件的情况是字符串中所有的内容都必须为大写或小写,有一个字母不是的话那就无法返回 true 。当然,这两个判断里面也都必须是英文字母,不能有数字、空格之类的内容。

    ctype_print() 是判断是否是可打印内容。什么是可打印内容呢?就是 echo 、 print 之类的能够输出并且你能在屏幕上看到的内容。

    ctype_graph() 是除了空白字符之外的可打印字符。什么叫空白字符呢?\n、\t这一类的制表符号,还有我们正常的空格都是空白字符。

    ctype_punct() 可以简单的理解为就是标点符号,整个字符串都是标点符号组成的,并且不包含空白内容。

    // \n \t \r 之类
    if(ctype_cntrl($input)){
        echo $input, '是格式控制字符!', PHP_EOL;
    }
    
    // 空格
    if(ctype_space($input)){
        echo $input, '是空格字符!', PHP_EOL;
    }
    
    // 16进制 AB10BC99
    if(ctype_xdigit($input)){
        echo $input, '是十六进制字符!', PHP_EOL;
    }
    

    貌似制表符不是很受欢迎呀,不用怕,ctype_cntrl() 就是专门判断整个字符是不是由这些制表符组成的。

    ctype_space() 从名字就可以看出,是不是由空格组成的字符串。

    ctype_xdigit() 是我们最后一个 ctype_ 函数,从名字其实也能够看出来,它是判断是否是16进制字符串的。

    ctype_digit() 与 is_numeric() 的区别

    这两个函数都是判断参数是否为数字的,但是它们有一个很大的区别就是 ctype_digit() 仅针对字符串。也就是说它是用来判断字符串中的内容是否是数字的,如果直接给它一个普通的数字类型,那么它还是会返回 false 的,它会认为这个数字类型的内容不是一个“字符串”类型的数字。

    // ctype_digit 与 is_numeric 的区别
    $numeric_string = '42';
    $integer        = 42;
    
    echo ctype_digit($numeric_string), PHP_EOL;  // true
    echo ctype_digit($integer), PHP_EOL;         // false (ASCII 42 is the * character)
    
    echo is_numeric($numeric_string), PHP_EOL;   // true
    echo is_numeric($integer), PHP_EOL;          // true
    

    总结

    是不是一组很方便的函数。不过其实现在使用正则也很方便,而且正则的组合形式更加多样,我们的可控制范围更大,所以正则还是在这种情况下的首选。当然,越灵活也越有可能出错,正则中如果漏写一点内容又没有详尽的测试的话,也有可能造成严重的后果。因此,在日常工作中,具体的取舍还是要看我们自身,这里也只是为大家作个科普介绍,使用何种方式的决定权还是掌握在我们自己手上。

    另外需要说明的是,这一组 ctype_ 函数,是不支持中文的,它们仅支持英文、数字、英文符号这一类的判断。

    测试代码: github.com/zhangyue050…

    参考文档: www.php.net/manual/zh/r…


    起源地下载网 » 不使用正则进行英文数字等相关字符的规则校验

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元