【问题标题】:PHP string validation function encoding failsPHP字符串验证函数编码失败
【发布时间】:2013-08-13 20:38:39
【问题描述】:

字符串“Árvíztűrő tükörfúrógép”似乎无效。为什么?

if(isValid("Árvíztűrő tükörfúrógép",true,true))echo "VALID";else echo "INVALID";

function isValid($s, $abc=false, $accent=false, $numbers=false, $etc="")
{
    $valid="";

    if($abc)
        $valid = "abcdefghijklmnopqrstzuvwxyz";
    if($accent)
        $valid .= "öüóűőúéáí";
    if($numbers)
        $valid .= "0123456789";

    $valid .= $etc;

    for($i=0; $i < mb_strlen($s); $i++){
        $k = false;
        for($j = 0; $j < mb_strlen($valid); $j++){
            if(strtolower(mb_substr($s, $i, 1)) == mb_substr($valid, $j, 1))
                $k = true;
        }
        if(!$k) 
            return false;
    }
    return true;
}

提前感谢您的帮助!

更新#1:

davebobak 注意到小写的 Á 不等于 á,但为什么呢?

【问题讨论】:

  • 请写下您想通过isValid() 函数实现的目标

标签: php function encoding multibyte


【解决方案1】:

strtolower() 不适用于您的 Á 角色

á 在我的测试中不等于 strtolower("Á")。

删除你的Á和空格(就像cars10所说的)它是有效的。

【讨论】:

  • 真的!为什么它们不匹配?
  • @user2302838 你正在使用mbstring 库;我建议您阅读更多有关它的内容,以了解为什么不这样做:-)(注意:mb_strtolower("Á") == "á"
  • 啊,我明白了! :) 谢谢!
【解决方案2】:

您的测试字符串"Árvíztűrő tükörfúrógép" 包含一个空白(在őt 之间),它不在您接受的字符列表中。通过这个额外的空白扩展$abc$valid-string,你应该没问题。

【讨论】:

  • 好点,没有空间。实际上我不想用它来验证字符串,但这一次只是一个测试,不幸的是我忘记了。
猜你喜欢
  • 2021-06-19
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
  • 1970-01-01
  • 2012-06-18
  • 2016-11-01
  • 2012-08-28
相关资源
最近更新 更多