Подтвердить с помощью ord () - PullRequest
0 голосов
/ 31 октября 2019

я хочу проверить опубликованные данные (целые и строчные строчные буквы) из текстового поля, используя ord ():

t1 - текст, отправленный из текстового поля в формате html,

for($i=0; $i<strlen($t1); $i++){
    if(ord(substr($t1,$i,1))>64 || ord(substr($t1,$i,1))<123){
        if(ord(substr($t1,$i,1))>89 && ord(substr($t1,$i,1))<97 ||
            ord(substr($t1,$i,1))>122) {
            $validLoginInfoAcceptedUserName = false;
            break;
        }
    } else {
        $validLoginInfoAcceptedUserName = true;
        continue;
    }
}

Я попробовал все, но я застрял, пожалуйста, если вы знаете, где проблема, помогите мне исправить это, но если вы не знаете, не предлагайте какой-либо другой способ проверки.

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

Альтернативный способ использования массива допустимых диапазонов, а затем проверьте, находится ли он в массиве или нет. Обратите внимание, что вы можете получить доступ к строке по позиции $t1[$i]:

$range = array_merge(range(48, 57), range(65, 90), range(97, 122));

for($i=0; $i<strlen($t1); $i++){
    if(!in_array(ord($t1[$i]), $range)) {
        $validLoginInfoAcceptedUserName = false;
        break;
    }
    $validLoginInfoAcceptedUserName = true;
}

Просто для удовольствия вы можете разбить строку, сопоставить каждый символ с ord и вычислить разницу с диапазоном:

$range = array_merge(range(48, 57), range(65, 90), range(97, 122));
$array = array_map('ord', str_split($t1));

$validLoginInfoAcceptedUserName = !(array_diff($array, $range));

Однако просто используйте ctype_alnum :

$validLoginInfoAcceptedUserName = ctype_alnum($t1);
2 голосов
/ 31 октября 2019

Проблема с тем, как вы проверяете с помощью ord(), состоит в том, что есть некоторые условия, когда $validLoginInfoAcceptedUserName никогда не будет установлен, и другие условия, когда вы пропускаете часть диапазона символов, которые вы пытаетесь проверить.

Вы можете упростить его, используя одиночное условие if, а не вложенное условие. Кроме того, вы можете избежать повторного вызова ord() и substr(), присваивая результат переменной перед проверкой.

for ($i = 0, $l = strlen($t1); $i < $l; $i++) {
    $o = ord(substr($t1, $i, 1));
    if ($o < 48 || $o > 57 && $o < 65 || $o > 90 && $o < 97 || $o > 122) {
        $validLoginInfoAcceptedUserName = false;
        break;
    } else {
        $validLoginInfoAcceptedUserName = true;
    }
}

Или просто используйте preg_match.

$validLoginInfoAcceptedUserName = preg_match('/^\p{Xan}*$/', $t1);
...