使用Regex验证字符串是否正确

时间:2015-04-06 19:30:08

标签: c# regex string validation

我想验证字符串字段以确保每个字符串的第一个字母是大写的。

例如:

"My Name Is Jaas" - This is valid
"My name is Jaas" - Is Invalid because 'name' and 'is' start with lower-case letter.

我想在C#中使用正则表达式来验证这一点。什么是正确的正则表达式?

4 个答案:

答案 0 :(得分:3)

所以我不会将这种约束强加于每个人的'验证',而是做一个简单的转换。您的用户会感谢您。

另外,虽然我是正则表达式的忠实粉丝,但有一种情况我觉得没有它会更好。

您可以使用以下内容:

TextInfo textInfo = new CultureInfo("en-US",false).TextInfo;
string formatted = textInfo.ToTitleCase( "yOur STRING hErE" );

如果您仍然坚持使用验证,则可以比较格式前和格式后的值。

PS:你需要这个名称空间using System.Globalization;

答案 1 :(得分:2)

在这里看起来你不需要任何正则表达式。使用LINQ .Split().All(p => p.Substring(0, 1) == p.Substring(0, 1).ToUpper())检查所有单词是否包含大写的第一个字符(不要忘记使用语句添加System.LinqSystem.Xml.Linq):

var tst = "My Name Is Jaas";
var ntst = "My name is Jaas";
var pass = tst.Split().All(p => p.Substring(0, 1) == p.Substring(0, 1).ToUpper());
var fail = ntst.Split().All(p => p.Substring(0, 1) == p.Substring(0, 1).ToUpper());

输出:

pass = true
fail = false

如果你坚持使用正则表达式,你可以使用以下一个:

var rxTitleCase = new Regex(@"^(\p{Lu}\p{L}*\s*)+$");
var tstSuccess = rxTitleCase.IsMatch(tst);
var tstFail = rxTitleCase.IsMatch(ntst);

输出与上述相同。

答案 2 :(得分:0)

如果您确定输入始终用一个空格分隔,则可以在每个空格上拆分输入,并检查每个单词的第一个字符是否为char.IsUpper大写:

.Split().All(w => char.IsUpper(w[0]));

例如:

var correct = "My Name Is Jaas";
var incorrect = "My name is Jaas";

bool willbeTrue = correct.Split().All(w => char.IsUpper(w[0]));
bool willBeFalse = incorrect.Split().All(w => char.IsUpper(w[0]));

如果它可以包含多个空格,则可以删除此String.Split重载的空条目:

.Split(new[]{' '}, StringSplitOptions.RemoveEmptyEntries).All(w => char.IsUpper(w[0]));

答案 3 :(得分:0)

此Rexex应该可以满足您的要求......

        var pattern = @"^([\S-[a-z]]\S*\s*)+$";
        var test = "My Name Is Jaas";
        var test2 = "My name is Jaas";
        var test3 = "My Name Is Jaas The 3rd";

        var rx = new Regex(pattern);
        var t1 = rx.IsMatch(test);
        var t2 = rx.IsMatch(test2);
        var t3 = rx.IsMatch(test3);

模式[\ S- [a-z]]表示除小写字母外的任何非空白字符。我是这样做的,因为你说你想要正确的案例,我不能确定你的子串是否可能以非字母字符开头。您的示例很简单,但如果您的实际数据变得更复杂,我会将其作为开始的地方。

顺便说一句,它与stribizhev的正则表达式非常相似。