c#使用线程验证输入字符串并替换为TitleCase
Posted
技术标签:
【中文标题】c#使用线程验证输入字符串并替换为TitleCase【英文标题】:c# Validating input string and replace to TitleCase using Threading 【发布时间】:2017-10-11 15:14:16 【问题描述】:我想检查用户在文本框中写的内容,并从包含在 winform 中的文本框中获取此输入字符串,然后需要将其转换为将单词的每个字母大写。
使用此输入,我需要首先验证他们是否将文本框留空,即 Null。第二步是检查他们是否使用标题大小写形成了一个连贯的句子“换句话说,确保他们没有在大写锁定的情况下打字,反之亦然”。
我一直在研究有关验证的线程和正则表达式。使用线程我使用了 IsLower() 和 ToLower() 方法。这可能是转换输入的一条相当长的路,至少我可以将每个单词的所有第一个字母都转换为大写,并将中间的所有字母转换为小写。
如果我没有很好地解释我的问题,请询问并很乐意对任何额外信息进行攻击,请在下面找到我的源代码:
string myText = tbProductId.Text;
//// Check for null values
if (myText.Equals(""))
//// display Error prompt
MessageBox.Show("Please enter somthing");
//// Get length of entered string
else
for (int i = 0; i < myText.Length; i++)
//// check if lower case
if (char.IsLower(myText[i]))
string asTitleCase = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.
ToTitleCase(myText.ToLower());
MessageBox.Show("Please enter non Captilised strings");
for (int i = 0; i < myText.Length; i++)
if (char.IsUpper(myText[i]))
string asTitleCase = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.
ToTitleCase(myText.ToUpper());
MessageBox.Show("Please enter strings in Title Case");
【问题讨论】:
看起来您只需要将 for 循环部分从外部if
块中取出,放入 else
块中。您当前正在做的是循环一个空字符串,因此执行将永远不会进入循环。我没有得到“线程”部分 - 你是什么意思?
这看起来像是一段不完整的代码。似乎您想确保字符串同时包含大写和小写字母,并且不应该为空。类似if (!string.IsNullOrEmpty(myText) && myText.Any(char.IsLower) && myText.Any(char.IsDigit)) return true;
例如“Apple”会通过您的验证吗?还是必须转换成“APPLE”?
感谢@dlatikay 的建议,这使循环现在可以遍历实际值,现在检查空值和大小写。但是现在我需要用大写字母替换每个字母的开头。所以就像下面的“你好世界,我需要改变”到“你好世界,我需要改变”
@Wiktor Stribiżew 是的,你是对的,我已经用完整的方法替换了上面的代码,其中包括 ToUpper() 和 To Lower(),感谢您的回复,我们会试一试。跨度>
【参考方案1】:
感谢所有反馈和帮助,请在下面找到@Wiktor Stribiżew 提供的解决方案。然而还有一个问题,当 shift 被保持时,它是不活动的,并且没有任何想法为什么它会使用 caps lock 而不是 shift ?
string myText = tbProductId.Text;
if (myText.Equals(""))
MessageBox.Show("Please enter somthing");
else
tbProductId.Text = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(tbProductId.Text);
tbProductId.Focus();
tbProductId.Select(tbProductId.Text.Length, 0);
//Move Cursor to location of where error
【讨论】:
除了空白和移位问题外,一切正常以上是关于c#使用线程验证输入字符串并替换为TitleCase的主要内容,如果未能解决你的问题,请参考以下文章
Veracode 为 C# 中的公共字符串属性引发“技术特定的输入验证问题 (CWE ID 100)”
在C#程序中用if-else语句判断只能输入英文、空格、小数点的验证方法。