사용자 이름을 밑줄로 영숫자로 검증하십시오
-
19-09-2019 - |
문제
등록 페이지에서 사용자 이름을 영숫자로만 유효성을 유지해야하지만 선택적 밑줄도 있습니다. 나는 이것을 생각해 냈다 :
function validate_alphanumeric_underscore($str)
{
return preg_match('/^\w+$/',$str);
}
괜찮은 것처럼 보이지만, 나는 동선 전문가가 아닙니다! 아무도 문제를 발견합니까?
해결책
실제 일치하는 캐릭터 \w
로케일에 의존합니다 사용 중입니다.
"Word"캐릭터는 모든 문자 나 숫자 또는 밑줄 문자, 즉 Perl의 일부가 될 수있는 캐릭터 "입니다.단어". 문자와 숫자의 정의는 PCRE의 문자 테이블에 의해 제어되며 로케일 특정 일치가 발생하는 경우에 따라 다를 수 있습니다. 예를 들어"FR "(프랑스) 로케일에서 128보다 큰 일부 캐릭터 코드는 악센트에 사용됩니다. 문자, 그리고 이것들은 w와 일치합니다.
따라서 허용하려는 문자를 더 잘 지정해야합니다.
/^[A-Za-z0-9_]+$/
이를 통해 영숫자와 밑줄 만 허용합니다.
그리고 밑줄이 연결 문자로만 밑줄을 허용하고 사용자 이름이 알파벳 문자로 시작해야한다는 강제를 원한다면 다음과 같습니다.
/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/
다른 팁
다음은 다음을 사용하여 문자열을 검증하는 사용자 정의 기능입니다. php ctype_alnum 허용 숯의 배열과 함께 :
<?php
$str = "";
function validate_username($str) {
// each array entry is an special char allowed
// besides the ones from ctype_alnum
$allowed = array(".", "-", "_");
if ( ctype_alnum( str_replace($allowed, '', $str ) ) ) {
return $str;
} else {
$str = "Invalid Username";
return $str;
}
}
?>
노력하다
function validate_alphanumeric_underscore($str)
{
return preg_match('/^[a-zA-Z0-9_]+$/',$str);
}
나에게 괜찮아 보인다. 밑줄의 배치에 대한 요구 사항이 없으므로 "username_"및 "___username"은 둘 다 통과합니다.
나는 Gumbo의 2 차 정서를 가져 가서 밑줄 만 동의하는 것으로 만 허용하지만, _ 이후에 A +를 추가하여 사용자는 "Special__username"과 같을 수 있습니다.
/^[A-Za-z][A-Za-z0-9]*(?:_+[A-Za-z0-9]+)*$/
자신의 솔루션은 완벽하게 괜찮습니다.
preg_match
캐릭터 클래스가있는 Perl과 같은 일반 표현식을 사용합니다. \w
필요한 것과 정확히 일치하도록 정의됩니다.
\w
- "단어"문자와 일치
(원천)