문제

등록 페이지에서 사용자 이름을 영숫자로만 유효성을 유지해야하지만 선택적 밑줄도 있습니다. 나는 이것을 생각해 냈다 :

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 - "단어"문자와 일치

(원천)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top