>

다음과 같은 문자열을 작성하십시오 :

In C#: How do I add "Quotes" around string in a comma delimited list of strings?

그리고 그것을 다음으로 변환하십시오 :

in-c-how-do-i-add-quotes-around-string-in-a-comma-delimited-list-of-strings

요구 사항 :

  • 각 단어를 대시로 구분하고 구두점을 모두 제거하십시오 (모든 단어가 공백으로 분리되는 것은 아닙니다).
  • 함수는 최대 길이를 가지며 해당 최대 길이 미만의 모든 토큰을 가져옵니다. 예 : ToSeoFriendly("hello world hello world", 14)   "hello-world" 를 반환
  • 모든 단어가 소문자로 변환됩니다.

별도의 메모에 최소 길이가 있어야합니까?

  • 답변 # 1

    다음은 C #의 솔루션입니다

    private string ToSeoFriendly(string title, int maxLength) {
        var match = Regex.Match(title.ToLower(), "[\\w]+");
        StringBuilder result = new StringBuilder("");
        bool maxLengthHit = false;
        while (match.Success && !maxLengthHit) {
            if (result.Length + match.Value.Length <= maxLength) {
                result.Append(match.Value + "-");
            } else {
                maxLengthHit = true;
                // Handle a situation where there is only one word and it is greater than the max length.
                if (result.Length == 0) result.Append(match.Value.Substring(0, maxLength));
            }
            match = match.NextMatch();
        }
        // Remove trailing '-'
        if (result[result.Length - 1] == '-') result.Remove(result.Length - 1, 1);
        return result.ToString();
    }
    
    

  • 답변 # 2

    다음 단계를 따릅니다.

    <올>

    문자열을 소문자로 변환

    원치 않는 문자를 하이픈으로 교체

    여러 개의 하이픈을 하나의 하이픈으로 교체( preg_replace() 에는 필요하지 않음  함수 호출은 이미 여러 하이픈을 방지합니다)

    필요한 경우 시작과 끝에서 하이픈 제거

    x 위치 끝에서 마지막 하이픈에서 끝까지 트림

    따라서 모두 함수 (PHP)로 :

    function generateUrlSlug($string, $maxlen=0)
    {
        $string = trim(preg_replace('/[^a-z0-9]+/', '-', strtolower($string)), '-');
        if ($maxlen && strlen($string) > $maxlen) {
            $string = substr($string, 0, $maxlen);
            $pos = strrpos($string, '-');
            if ($pos > 0) {
                $string = substr($string, 0, $pos);
            }
        }
        return $string;
    }
    
    

  • 답변 # 3

    C #

    public string toFriendly(string subject)
    {
        subject = subject.Trim().ToLower();
        subject = Regex.Replace(subject, @"\s+", "-");
        subject = Regex.Replace(subject, @"[^A-Za-z0-9_-]", "");
        return subject;
    }
    
    

  • 답변 # 4

    다음은 PHP 솔루션입니다 :

    function make_uri($input, $max_length) {
      if (function_exists('iconv')) {  
        $input = @iconv('UTF-8', 'ASCII//TRANSLIT', $input);  
      }
      $lower = strtolower($input);
    
      $without_special = preg_replace_all('/[^a-z0-9 ]/', '', $input);
      $tokens = preg_split('/ +/', $without_special);
      $result = '';
      for ($tokens as $token) {
        if (strlen($result.'-'.$token) > $max_length+1) {
          break;
        }
        $result .= '-'.$token;       
      }
      return substr($result, 1);
    }
    
    

    사용법 :

    echo make_uri('In C#: How do I add "Quotes" around string in a ...', 500);
    
    

    일반적인 소변을 필요로하지 않는 한, 크기가 작을 필요는 없습니다. 하지만 URL이 프록시 등에서 잘 작동하도록 최대 값을 지정해야합니다.

  • 답변 # 5

    더 나은 버전 :

    function Slugify($string)
    {
        return strtolower(trim(preg_replace(array('~[^0-9a-z]~i', '~-+~'), '-', $string), '-'));
    }
    
    

관련 자료

  • 이전 graphics - 현재 플롯 창 크기를 변경하는 방법 (R)
  • 다음 python - heapqnlargest는 어떻게 작동합니까?