使用 ord() 验证
Validate With ord()
我想使用 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;
}
}
我什么都试过了,但我卡住了,如果你知道问题出在哪里,请帮助我解决这个问题,但如果你不知道,请不要建议任何其他验证方式。
您使用 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);
另一种方法是使用有效范围数组,然后检查它是否在数组中。请注意,您可以按位置 $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);
我想使用 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;
}
}
我什么都试过了,但我卡住了,如果你知道问题出在哪里,请帮助我解决这个问题,但如果你不知道,请不要建议任何其他验证方式。
您使用 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);
另一种方法是使用有效范围数组,然后检查它是否在数组中。请注意,您可以按位置 $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);