PDA

View Full Version : سوال: کنترل رشته ورودی با فرمت خاص



دلتنگ اسمان
شنبه 28 تیر 1393, 15:23 عصر
با سلام
میخوام رشته ورودی تکس باکس با فرمت زیر همخوانی داشته باشه در غیر اینصورت پیغام بده.
1-اگر عدد وارد شد تک رقمی بوده و بین 1تا8 باشد
2- اگر حروف وارد شد ، یکی از حروف A,B,C,D باشد
3-هیچگاه دو تا حرف کنار هم قرار نگیرن و تکراری هم نباشن.یعنی به اینصورت نباشن: AA یا AB
4-بین هر حرف (منظورم همان چهار حرف) یا عددی که وارد میشود کاربر با وارد کردن کارکتر '-' انها رو از هم جدا کنه.
کدها شو نوشتم اما درست کار نمیکنه . مثلا به این صورت باشه: A-B-C
اگه رشته ورودی با ' -' شروع بشه درست عمل میکنه .
ولی اگه اول یکی از حروف وارد بشه و بعد - و دوباره حرف دیگه وارد بشه پیغام میده.

string reg = "[1-9]{2}";
if (Regex.IsMatch(text.Text, reg))
{
MessageBox.Show("عدد وارد شده باید بین 1 تا 8 باشد", "عدد ورودی", MessageBoxButtons.OK);
text.Text = "";
return;
}

text.Text = text.Text.ToUpper();

string reg1 = "[A-E]{2}";
if (Regex.IsMatch(text.Text, reg1))
{
MessageBox.Show("حروف وارد شده صحیح نیست", "حروف وارد شده", MessageBoxButtons.OK);
text.Text = "";
return;
}
string reg3 = "[a-e]{1}";
if (Regex.IsMatch(text.Text, reg3))
{

MessageBox.Show("حروف وارد شده صحیح نیست", "حروف وارد شده", MessageBoxButtons.OK);
text.Text = "";

return;
}

abbas.oveissi
شنبه 28 تیر 1393, 18:20 عصر
با سلام
میخوام رشته ورودی تکس باکس با فرمت زیر همخوانی داشته باشه در غیر اینصورت پیغام بده.
1-اگر عدد وارد شد تک رقمی بوده و بین 1تا8 باشد
2- اگر حروف وارد شد ، یکی از حروف A,B,C,D باشد
3-هیچگاه دو تا حرف کنار هم قرار نگیرن و تکراری هم نباشن.یعنی به اینصورت نباشن: AA یا AB
4-بین هر حرف (منظورم همان چهار حرف) یا عددی که وارد میشود کاربر با وارد کردن کارکتر '-' انها رو از هم جدا کنه.
کدها شو نوشتم اما درست کار نمیکنه . مثلا به این صورت باشه: A-B-C
اگه رشته ورودی با ' -' شروع بشه درست عمل میکنه .
ولی اگه اول یکی از حروف وارد بشه و بعد - و دوباره حرف دیگه وارد بشه پیغام میده.

string reg = "[1-9]{2}";
if (Regex.IsMatch(text.Text, reg))
{
MessageBox.Show("عدد وارد شده باید بین 1 تا 8 باشد", "عدد ورودی", MessageBoxButtons.OK);
text.Text = "";
return;
}

text.Text = text.Text.ToUpper();

string reg1 = "[A-E]{2}";
if (Regex.IsMatch(text.Text, reg1))
{
MessageBox.Show("حروف وارد شده صحیح نیست", "حروف وارد شده", MessageBoxButtons.OK);
text.Text = "";
return;
}
string reg3 = "[a-e]{1}";
if (Regex.IsMatch(text.Text, reg3))
{

MessageBox.Show("حروف وارد شده صحیح نیست", "حروف وارد شده", MessageBoxButtons.OK);
text.Text = "";

return;
}
من دقیقا این کد رو کپی کردم عبارت A-B رو که قبول میکرد بدون مشکل؟!

دلتنگ اسمان
شنبه 28 تیر 1393, 19:36 عصر
والا من هر چی میزنم پیغام میده. اول حرف A رو زدی بعد'-' وبعد هم B را؟ من که میزنم نمیشه!!!
این هم کد خودم:

private void textBox1_TextChanged(object sender, EventArgs e)
{
txtch(textBox1);
}


void txtch(TextBox text)
{
string reg = "[1-9]{2}";
if (Regex.IsMatch(text.Text, reg))
{
MessageBox.Show("عدد وارد شده باید بین 1 تا 8 باشد", "عدد ورودی", MessageBoxButtons.OK);
text.Text = "";
return;
}

text.Text = text.Text.ToUpper();

string reg1 = "[A-E]{2}";
if (Regex.IsMatch(text.Text, reg1))
{
MessageBox.Show("حروف وارد شده صحیح نیست", "حروف وارد شده", MessageBoxButtons.OK);
text.Text = "";
return;
}
string reg3 = "[a-e]{1}";
if (Regex.IsMatch(text.Text, reg3))
{

MessageBox.Show("حروف وارد شده صحیح نیست", "حروف وارد شده", MessageBoxButtons.OK);
text.Text = "";

return;
}
}

abbas.oveissi
شنبه 28 تیر 1393, 21:40 عصر
والا من هر چی میزنم پیغام میده. اول حرف A رو زدی بعد'-' وبعد هم B را؟ من که میزنم نمیشه!!!
این هم کد خودم:

بعد خط 17 که تابع ToUpper رو استفاده کردید این خط رو اضافه کنید.text.Select(text.Text.Length, 0);حالا باز تست کنید و نتیجه رو بگید؟:متفکر:

دلتنگ اسمان
یک شنبه 29 تیر 1393, 04:58 صبح
بعد خط 17 که تابع ToUpper رو استفاده کردید این خط رو اضافه کنید.text.Select(text.Text.Length, 0);حالا باز تست کنید و نتیجه رو بگید؟:متفکر:

ممنون درست شد.
این کد چی میکنه؟ آخرین کاراکتر رشته رو انتخاب میکنه؟

abbas.oveissi
یک شنبه 29 تیر 1393, 05:13 صبح
ممنون درست شد.
این کد چی میکنه؟ آخرین کاراکتر رشته رو انتخاب میکنه؟
مشکل اینجا بود زمانی که تابع ToUpper بعد هر حرف فراخوانی میشد،کرسر به جای اینکه بعد آخرین حرف باشه به اول TextBox منتقل میشد.برای همین اگر A-B تایپ میکردید مثلا همچین چیزی میشد : BA-
حالا من هر بار بعد تابع ToUpper با استفاده از همون خط کد دوباره کرسر رو به آخر انتقال دادم.البته این متد اصلش برای این هست که باهاش بتونی متن رو Select کنی،این هم پرامتر هاش :
public void Select( int start, int length )