Я ищу создать шаблон RegEx
- 8 символов
[a-zA_Z]
- должен содержать только одну цифру в любом месте строки
Я создал этот узор:
^(?=.*[0-9].*[0-9])[0-9a-zA-Z]{8}$
Этот шаблон работает нормально, но мне нужна только одна цифра. Пример:
aaaaaaa6 match
aaa7aaaa match
aaa88aaa don't match
aaa884aa don't match
aaawwaaa don't match
2 ответа
Вы могли бы вместо этого использовать:
^(?=[0-9a-zA-Z]{8})[^\d]*\d[^\d]*$
Первая часть утверждает, что совпадение содержит 8 алфавитов или цифр. Как только это будет обеспечено, вторая часть гарантирует, что в совпадении будет только одна цифра.
РЕДАКТИРОВАТЬ: Объяснение:
- Якоря
^
и$
обозначают начало и конец строки. (?=[0-9a-zA-Z]{8})
утверждает, что совпадение содержит 8 алфавитов или цифр.[^\d]*\d[^\d]*
будет означать, что есть только один цифровой символ, а остальные нецифровые символы. Поскольку мы уже утверждали, что входные данные содержат цифры или алфавиты, нецифровые символы здесь являются алфавитами.
Если вам нужно решение без регулярных выражений, я написал это для небольшого проекта:
public static bool ContainsOneDigit(string s)
{
if (String.IsNullOrWhiteSpace(s) || s.Length != 8)
return false;
int nb = 0;
foreach (char c in s)
{
if (!Char.IsLetterOrDigit(c))
return false;
if (c >= '0' && c <= '9') // just thought, I could use Char.IsDigit() here ...
nb++;
}
return nb == 1;
}
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.