Отфильтруйте строку

У меня мало терпения к пользователям, которые не читают, что заняло у меня много времени и усилий для разработки: 1) приложения 2) инструкции Кроме того, если вы не читаете и просто делаете «все, что нужно» " ты сам по себе. Я заявляю это заранее. Я делаю свои приложения максимально интуитивно понятными, и все же есть люди, которые будут звонить в службу поддержки по полной программе, как ребенок, выпадающий из класса, когда им этого не следует. У меня нет терпимости к этому. Прочитайте руководство, прочитайте диалоги - ответы на 99% проблем прямо здесь.

15
задан Gabe 25 May 2009 в 20:42
поделиться

5 ответов

Это кажется вполне веской причиной для использования регулярного выражения .

bool stringIsValid = Regex.IsMatch(inputString, @"^[a-zA-Z0-9\-]*?$");

В ответ на комментарий Мигеля вы можете сделать это, чтобы удалить все нежелательные символы:

string cleanString = Regex.Replace(inputString, @"[^a-zA-Z0-9\-]", "");

Обратите внимание, что символ вставки ( ^ ) теперь помещается внутри класса символов, таким образом отменяя его (соответствует любому запрещенному символу).

34
ответ дан 1 December 2019 в 00:16
поделиться

Вот интересный способ сделать это с помощью LINQ - без уродливых циклов, без сложного RegEx:

private string GetGoodString(string input)
{
   var allowedChars = 
      Enumerable.Range('0', 10).Concat(
      Enumerable.Range('A', 26)).Concat(
      Enumerable.Range('a', 26)).Concat(
      Enumerable.Range('-', 1));

   var goodChars = input.Where(c => allowedChars.Contains(c));
   return new string(goodChars.ToArray());
}

Feed it " Привет, мир? 123! " и он вернет "Helloworld123".

13
ответ дан 1 December 2019 в 00:16
поделиться

Попробуйте следующее

public bool isStringValid(string input) {
  if ( null == input ) { 
    throw new ArgumentNullException("input");
  }
  return System.Text.RegularExpressions.Regex.IsMatch(input, "^[A-Za-z0-9\-]*$");
}
3
ответ дан 1 December 2019 в 00:16
поделиться

Почему бы просто не использовать замену? Trimstart удалит только первые символы в вашем списке ...

1
ответ дан 1 December 2019 в 00:16
поделиться

Я уверен, что потратив немного больше времени, вы сможете придумать что-нибудь получше, но это даст вам хорошее представление:

public string NumberOrLetterOnly(string s)
{
    string rtn = s;
    for (int i = 0; i < s.Length; i++)
    {
        if (!char.IsLetterOrDigit(rtn[i]) && rtn[i] != '-')
        {
            rtn = rtn.Replace(rtn[i].ToString(), " ");
        }
    }
    return rtn.Replace(" ", "");
}
1
ответ дан 1 December 2019 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: