Программе присваивается строка для имени ячейки в электронной таблице. Эта таблица может содержать ячейку с именем, которое начинается с буквы a-zA-Z_, это должно быть так, что-то еще недействительно. После первой буквы или подчеркивания может быть любая комбинация букв или символов подчеркивания. Например:
______35we3I
Допустимое имя
123dfdf
НЕ является допустимым именем.
Если эти строки существуют, я хочу создать исключение. Я новичок в регулярных выражениях, но это то, что я придумал, и это не работает, как я этого хочу.
@"[a-zA-Z_][a-zA-Z_|\d]*"
Когда второй пример передается в функции Regex.IsMatch
возвращает true, потому что последняя половина выражения действительна. Есть ли способ начать с начала строки всегда?
Я должен сказать, что я попытался использовать {^}, чтобы выполнить вышеупомянутое условие, но он не принимает ничего, когда морковь там.
Вам нужно использовать стартовые и конечные якоря, и вам не нужно ставить |
внутри класса символов. |
внутри класса char будет соответствовать буквальный |
символ.
@"^[a-zA-Z_][a-zA-Z_\d]*$"
Код:
String s = "123dfdf";
if (!Regex.IsMatch(s, @"^[a-zA-Z_][a-zA-Z_\d]*$")) {
Console.WriteLine("Error! Wrong format.");
}
else {
Console.WriteLine("Correct format.");
}
Для тестирования вашего регулярного выражения у вас есть очень хороший сайт здесь.
Для вашего регулярного выражения вы хотите добавить валидатор числа в своем регулярном выражении:
@"^[0-9a-zA-Z_][a-zA-Z_\d]*"
с этим были подтверждены ваши две строки.
@"^[a-zA-Z_][a-zA-Z_\d]*"
с этим, только строка, начатая не числом, была проверена.