У меня мало терпения к пользователям, которые не читают, что заняло у меня много времени и усилий для разработки: 1) приложения 2) инструкции Кроме того, если вы не читаете и просто делаете «все, что нужно» " ты сам по себе. Я заявляю это заранее. Я делаю свои приложения максимально интуитивно понятными, и все же есть люди, которые будут звонить в службу поддержки по полной программе, как ребенок, выпадающий из класса, когда им этого не следует. У меня нет терпимости к этому. Прочитайте руководство, прочитайте диалоги - ответы на 99% проблем прямо здесь.
Это кажется вполне веской причиной для использования регулярного выражения .
bool stringIsValid = Regex.IsMatch(inputString, @"^[a-zA-Z0-9\-]*?$");
В ответ на комментарий Мигеля вы можете сделать это, чтобы удалить все нежелательные символы:
string cleanString = Regex.Replace(inputString, @"[^a-zA-Z0-9\-]", "");
Обратите внимание, что символ вставки ( ^
) теперь помещается внутри класса символов, таким образом отменяя его (соответствует любому запрещенному символу).
Вот интересный способ сделать это с помощью 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".
Попробуйте следующее
public bool isStringValid(string input) {
if ( null == input ) {
throw new ArgumentNullException("input");
}
return System.Text.RegularExpressions.Regex.IsMatch(input, "^[A-Za-z0-9\-]*$");
}
Почему бы просто не использовать замену? Trimstart удалит только первые символы в вашем списке ...
Я уверен, что потратив немного больше времени, вы сможете придумать что-нибудь получше, но это даст вам хорошее представление:
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(" ", "");
}