我想驗證字符串字段以確保每個字符串的第一個字母是大寫。使用正則表達式驗證字符串是否正確使用
例如:
"My Name Is Jaas" - This is valid
"My name is Jaas" - Is Invalid because 'name' and 'is' start with lower-case letter.
我想驗證此使用正則表達式中的C#。什麼是正確的正則表達式?
我想驗證字符串字段以確保每個字符串的第一個字母是大寫。使用正則表達式驗證字符串是否正確使用
例如:
"My Name Is Jaas" - This is valid
"My name is Jaas" - Is Invalid because 'name' and 'is' start with lower-case letter.
我想驗證此使用正則表達式中的C#。什麼是正確的正則表達式?
看起來你不需要任何正則表達式。使用LINQ .Split().All(p => p.Substring(0, 1) == p.Substring(0, 1).ToUpper())
檢查是否所有單詞都用大寫字母的第一個字符(不要忘了添加System.Linq
和System.Xml.Linq
using語句):
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);
輸出與上面相同。
你有我的投票給正則表達式字符串。謝謝 –
所以我不會強加這個約束作爲每個說法的「驗證」,而是做一個簡單的轉換。你的用戶會感謝你。
另外,雖然我是正則表達式的忠實粉絲,但這是一種情況,我認爲如果沒有它,情況會更好。
您可以使用以下方法:
TextInfo textInfo = new CultureInfo("en-US",false).TextInfo;
string formatted = textInfo.ToTitleCase("yOur STRING hErE");
如果你仍然堅持使用驗證你可以比較前後格式化值。
PS:你需要這個命名空間using System.Globalization;
是的,如果你可以避免驗證,這顯然是要走的路。 –
如果您確定輸入總是用一個空格分隔,可以在每個空間分割輸入和檢查每個單詞的第一個字母是大寫的與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]));
這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- [AZ]是指任何非空白字符除了小寫字母。我這樣做是因爲你說你想要正確大小寫,而且我不能確定你的子字符串是否可能以非字母字符開頭。你的例子很簡單,但如果你的實際數據變得更加複雜,我將它作爲一個開始的地方。
順便說一句,它是非常類似於stribizhev的正則表達式。
如果您明確說明「單詞」是什麼,這將會很有幫助。例如,「每個子字符串的第一個字符,如果它是一個字母是大寫字母,並且子字符串之間用空格分隔」。 – Les