Регулярное выражение: соответствие любому квесту.отметка или пробел в тексте - PullRequest
0 голосов
/ 08 декабря 2011

Я работаю в .NET (C # 4.0); Как мне написать выражение, которое соответствует тексту, который содержит '?' или пробел '\ S'?

GlennTest    (should not match)
Glenn?Test   (should match) 
Glenn Test   (should match) 
Glenn? Test  (should match) 
Glenn ?Test  (should match) 
?Glenn Test  (should match) 

Я могу написать выражение, чтобы найти его, но объединение их доставляет мне проблемы.

РАЗЪЯСНЕНИЯ: Я проясняю свой вопрос, потому что ни один из ответов до сих пор не сработал.

Я пишу приложение MVC со следующим атрибутом RegExp для одного из свойств, которое, кажется, работает как задумано (без пробелов).

    [DataMember(Name="Job Code")]
    [Required(ErrorMessage="Job Code is required.")]
    [RegularExpression(@"^\S*$", ErrorMessage = "Spaces are not allowed in the Job Code")]
    public string JobCode { get; set; }

Тем не менее, я хочу расширить эту возможность, чтобы запретить '?' вопросительные знаки также.

Я также хочу проверить это в коде, а не в MVC View, используя такой код:

public static bool IsValidCode(string code, out string message)
{
    message = "";
    const string NO_QMS_REG_EXP = @"^\?*$";
    const string NO_SPACES_REG_EXP = @"^\S*$";

    var expr1 = new Regex(NO_QMS_REG_EXP);
    var expr2 = new Regex(NO_SPACES_REG_EXP);
    if (expr1.IsMatch(code))
    {
        message = "Code cannot contain a question mark";
        return false;
    }
    if (expr2.IsMatch(code))
    {
        message = "Code cannot contain a space";
        return false;
    }
    // TODO: One expression that validates both simulatenously??
    return true;
}

Вопрос MVC3: Могу ли я программно выполнить проверку свойств Regex Attrib?

Ответы [ 4 ]

3 голосов
/ 08 декабря 2011

Вы также можете попробовать

^[^?\s]*$

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

2 голосов
/ 08 декабря 2011

Как насчет этого:

[\s?]+

См. Группа положительных символов

+ для одного или нескольких экземпляров , поскольку выГоворишь "Гленн? Тест" должен совпадать.Измените это на что-то вроде {1,2}, если вы хотите, чтобы это был ровно один или два экземпляра, как в указанной строке.

Glenn[\s?]+Test

Если вы просто хотите убедиться, что пробел или знак вопроса встречается где-либо встрока, которую подойдет простая [\s?].

Обновление

Что вы делаете, это проверяете строку, то естьубедитесь, что соответствует заданному требованию.Сообщение об ошибке отображается, если оно не .Ваше текущее регулярное выражение, проверяющее ^\S*$, не ищет строку, которая говорит: «от начала (^) до конца ($), все символы должны соответствовать шаблону \S*, который равен нулю или более экземпляровиз что-нибудь, но-пробел".

Вы можете обновить свой шаблон соответственно:

^[^\s?]*$

Что бы сказать" всю строку (опять же, * 1039)*) должен состоять только из символов, которые не в текущем наборе ([^...]) ".

1 голос
/ 08 декабря 2011

После обновления вам необходимо:

^[^\s?]*$

посмотреть здесь онлайн на Regexr

[^\s?] - это класс отрицанных символов, который будет соответствовать любомусимвол, кроме пробела и знака вопроса.

Для части инструментов онлайн-тестирования:

Существует также ответ на Программистов мной , где я перечисляю полезные (в основном онлайн) ресурсы Regex (это мой субъективный список, который был мне полезен, отнюдь не полный)

0 голосов
/ 08 декабря 2011

Ваш конкретный случай имеет следующее решение

[\s\?].+?\w.+?[\s\?].+?\w.+?[\s\?].+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...