Как создать регулярное выражение для удаления подчеркивания - PullRequest
2 голосов
/ 21 февраля 2012

Я использую MVC 3 с Razor.Я не могу понять, как кодировать регулярное выражение расширения строки, чтобы принять это:

This_is_some_text

, чтобы отобразить:

Этонекоторый текст

Я настроил некоторые перечисления для выпадающего списка, чтобы они выглядели так (очевидно, я не могу создать перечисление с пробелом):

public enum MyProperty 
{
     This_is_some_text, 
     This_is_some_other_text
}

Iпросто не могу понять, что регулярное выражение должно делать то, что я хочу, если я делаю это:

 public static string EnumToDisplay(this string str)
        {
            return Regex.Replace(str, "[What is the regex I should use?]");
        }

В качестве бонуса для меня я также хотел бы добавить точку "."до конца перечисления.Причина этого в том, что у меня ОКР, и мои перечисления принимают форму коротких предложений.:)

Спасибо!

Ответы [ 4 ]

3 голосов
/ 21 февраля 2012

Почему бы не использовать String.Replace() для этого?RegEx кажется немного излишним.

public static string EnumToDisplay(this string str)
{
    return str.Replace('_', ' ') + ".";
}
2 голосов
/ 21 февраля 2012

Почему вы хотите использовать регулярные выражения? Очень мудрый человек однажды сказал, я цитирую:

Некоторые люди, сталкиваясь с проблемой, думают: «Я знаю, я буду использовать регулярные выражения. "Теперь у них есть две проблемы.

Как насчет использования атрибута [Display], специально разработанного для этой цели:

public enum MyProperty
{
    [Display(Name = "This is some super text")]
    This_is_some_text,

    [Display(Name = "And this is some other text")]
    This_is_some_other_text
}

, а затем написание собственного Html-помощника:

public static class HtmlExtensions
{
    public static IHtmlString DisplayForEnum<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
    {
        if (!typeof(TProperty).IsEnum)
        {
            throw new ArgumentException("sorry this helper is inteded to be used with enum types");
        }

        var model = htmlHelper.ViewData.Model;

        if (htmlHelper.ViewData.Model == null)
        {
            return MvcHtmlString.Empty;
        }


        var field = typeof(TProperty).GetField(expression.Compile()(htmlHelper.ViewData.Model).ToString());
        if (field == null)
        {
            return new HtmlString(htmlHelper.Encode(htmlHelper.ViewData.Model.ToString()));
        }

        var display = field.GetCustomAttributes(typeof(DisplayAttribute), true).FirstOrDefault() as DisplayAttribute;
        if (display == null)
        {
            return new HtmlString(htmlHelper.Encode(htmlHelper.ViewData.Model.ToString()));
        }

        return new HtmlString(htmlHelper.Encode(display.Name));
    }
}

Итак, теперь предположим, что у вас есть модель вида:

public class MyViewModel
{
    public MyProperty Foo { get; set; }
}

и контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            Foo = MyProperty.This_is_some_other_text
        };
        return View(model);
    }
}

вы можете использовать пользовательский помощник, который мы только что написали в представлении, для отображения удобного для пользователя текста, который мы могли бы связать с уродливым перечислением. Эй, теперь вы можете даже работать с глобализацией и несколькими языками, используя ресурсы:

@model MyViewModel
@Html.DisplayForEnum(x => x.Foo)
1 голос
/ 21 февраля 2012

Вы можете использовать шаблон замены, который также называется заменой.

Вы можете найти информацию о грейте здесь: http://msdn.microsoft.com/en-us/library/ewy2t5e0.aspx

Удачи

1 голос
/ 21 февраля 2012

Я не знаю про asp.net - но должен быть действительно простым методом, который заменяет один символ другим символом. Как:

String.replace( myString, '_',' ' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...