c#试图将第一个字母改为大写,但不起作用

时间:2015-05-04 17:40:19

标签: c# regex uppercase

我必须将用户输入的每个单词的第一个字母转换为大写。我不认为我做得对,所以它不起作用,但我不确定哪里出错了D:提前感谢您的帮助! ^^

public function isFavori(users $user, contacts $contacts) {

    $em = $this->getEntityManager();
    $qb = $em->createQueryBuilder('c');
    $userid = $user->getId();
    $contactId = $contacts->getId();
    $query = $qb
        ->select('1')
        ->from('contactsBundle:contactsfavoris','cf')
        ->where('cf.user = :user')
        ->andWhere('cf.contact = :contact')
        ->setParameter('user', $userid)
        ->setParameter('contact', $contacts)
    ;

    try {
        $result = $qb->getQuery()->getSingleScalarResult();
    } catch (Exception $e) {
        $result = 0;
    }
    if ($result == 1 ) {
        $favori = true;
    } else {
        $favori = false;
    }

    return $favori;

}

6 个答案:

答案 0 :(得分:6)

如果您的练习不是正则表达式操作,那么有内置实用程序可以执行您所要求的操作:

System.Globalization.TextInfo ti = System.Globalization.CultureInfo.CurrentCulture.TextInfo;
string titleString = ti.ToTitleCase("this string will be title cased");

Console.WriteLine(titleString);

打印:

  

此字符串将标题为

如果您的操作是针对正则表达式,请参阅此前的StackOverflow答案:Sublime Text: Regex to convert Uppercase to Title Case?

答案 1 :(得分:1)

首先,你的正则表达式“^”匹配一行的开头。如果您需要匹配多字词行中的每个字,则需要使用不同的正则表达式,例如“[A-ZA-Z]”。

你也没有做任何事情来实际将第一个字母更改为大写。请注意,C#中的字符串是不可变的(它们在创建后无法更改),因此您需要创建一个新字符串,其中包含原始字符串的第一个字母,上部字符串,后跟字符串的其余部分。自己试试这个部分。如果您遇到问题,请尝试发布新问题。

答案 2 :(得分:1)

string pattern = "(?:^|(?<= ))(.)"

^不会自行捕获任何内容。您可以通过将函数应用于uppercase letters来替换为$1。请参阅演示。

Hangfire github repo

答案 3 :(得分:0)

我希望这可能有所帮助

public static string CapsFirstLetter(string inputValue)
    {
        char[] values = new char[inputValue.Length];
        int count = 0;
        foreach (char f in inputValue){
            if (count == 0){
                values[count] = Convert.ToChar(f.ToString().ToUpper());
            }
            else{
                values[count] = f;
            }
            count++;
        }
        return new string(values);
    }

答案 4 :(得分:0)

使用正则表达式执行此操作的另一种方法:

var Comments = React.createClass({
    render: function () {
        return (
            <div className="comments">
                <CommentList/>
                <CommentForm/>
            </div>
        );
    }
});

React.render(<Comments/>, document.getElementById("example"));

答案 5 :(得分:0)

我会使用Model Extensions来解决这个问题。

PHP有一个很好的方法叫做ucfirst。 所以我将其翻译成C#

public static string UcFirst(this string s)
{
    var stringArr = s.ToCharArray(0, s.Length);
    var char1ToUpper = char.Parse(stringArr[0]
        .ToString()
        .ToUpper());

    stringArr[0] = char1ToUpper;

    return string.Join("", stringArr);
}

用法:

[Test]
public void UcFirst()
{
    string s = "john";
    s = s.UcFirst();
    Assert.AreEqual("John", s);
}

显然,你仍然需要将你的句子分成一个列表,并为列表中的每个项目调用UcFirst。

Google C#模型扩展程序,如果您需要有关正在进行的操作的帮助。