Как получить точное регулярное выражение для приема числа только с алфавитом?

#c# #regex

#c# #регулярное выражение

Вопрос:

Привет, я пытался получить точное регулярное выражение для сопоставления числа только с алфавитом, я попробовал это

  Regex.IsMatch("1111", @"^[a-zA-Z0-9] $")
  

но результат верен.

Вот что я хочу вывести

 12345678 -> False
abcdefgh -> False
ABCDEFGH -> False
1234abcd -> True
1234ABCD -> True
  

Комментарии:

1. Буквы всегда идут после цифр или они могут располагаться в любом порядке?

2. в любом порядке, по крайней мере, есть цифры и буквы.

Ответ №1:

Попробуйте следующее выражение, соответствующее положительному прогнозу:

 ^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9] $
  

Это подтверждает, что оба сгруппированных выражения истинны, и возвращает полную строку при совпадении.

Пример: https://regex101.com/r/GxPPt9/2

Ответ №2:

Это будет соответствовать любой строке, содержащей как цифры, так и буквы, в любом порядке:

 ^[[:alnum:]]*(([0-9][A-Za-z])|([A-Za-z][0-9]))[[:alnum:]]*$
  

Если вы хотите, вы могли бы заменить [[:alnum:]] на [A-Za-z0-9] , это может быть обязательным для того, чтобы заставить его работать в C #, смотрите Комментарии под этим ответом .

Попробуйте:https://regex101.com/r/yj9sWw/2

Комментарии:

1. Хорошо, теперь вы можете удалить бесполезные группы захвата и использовать группу без захвата для той, которая необходима.

2. Я просто понимаю, что .net не поддерживает классы символов POSIX, такие как [:alnum:] , поэтому вы должны написать [a-zA-Z0-9]

Ответ №3:

Я предлагаю подход без регулярных выражений, подсчитывающий количество буквенных символов и цифр:

 bool ContainsOnlyDigitsAndLetters(string source)
{
    int letters = myInput.Count(Char.IsLetter);
    int numbers = myInput.Count(Char.IsDigit);
    return letters != 0 amp;amp; numbers != 0 amp;amp; letters   numbers == myInput.Length;
}
  

Это возвращает, true если ваш inout перепутан, false, если он содержит либо только цифры, либо только буквы, либо если в строке есть символы, которые не являются ни тем, ни другим.

Ответ №4:

Вы также можете написать:

 ^(?>[0-9] |[a-zA-Z] )[a-zA-Z0-9] $
  

[0-9]+|[a-zA-Z]+)[a-zA-Z0-9]+$amp;i=0h» rel=»nofollow»>ДЕМОНСТРАЦИЯ

Здесь атомарная группа (?>...) предотвращает возврат механизма регулярных выражений, поскольку квантификатор является жадным, следующий символ, которому соответствует [a-zA-Z0-9] , отличается от того, которому соответствует чередование. При [0-9] успешном выполнении ветви первый символ, совпадающий с [a-zA-Z0-9] , может быть только буквой, при [a-zA-Z] успешном выполнении первый символ, совпадающий с [a-zA-Z0-9] , может быть только цифрой.

Ответ №5:

Изменить

 a-zA-Z0-9
  

Для

 w d 

@"^[w d ] $"
  

Редактировать:

Если числа всегда стоят перед символами так просто:

 (d w )
  

Комментарии:

1. также _ совпадает ( w соответствует любому символу слова (буквенно-цифровому и подчеркиванию)

2. Регулярное выражение. IsMatch(«12345678″, @»^[ w d ] $») возвращает true, должно быть возвращено false

3. Ох. хорошо, извините, я неправильно понял 🙂 Отредактировано.

4. (d w ) соответствует, например 123