مشکل در متد Contains یک متغیر String
با سلام.
من یه متدی دارم که یک String به عنواد پارامتر میگیره و با یه For چک میکنه گه توی اون String ، رشته یا کارکتری وجود نداشته باشه ( یعنی در واقع اون رشته فقط باید عدد باشه ). متد زیر :
public char[] Numbers = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
//متدی که چک میکنه
public bool textContainsUnacceptable(string T, char[] Nambers)
{
for (int i = 0; i < Nambers.Length; i++)
if (T.Contains(Nambers[i]))
{
return false;
}
return true;
}
//اینطوری هم فراخوانیش میکنم.
if (textContainsUnacceptable(name, Numbers))
{
throw new Exception("در فیلد" + " " + object_name + " " + "فقط عدد وارد کنید");
}
همه چیز درست پیش میره تا زمانی که یه رشته که هم عدد داره هم کارکتر رو بهش پاس میکنم. ( مثلا 12345as47sd) . و برنامه هم قبول میکنه .
چرا ؟ مگه متد Contains معنی "شامل بودن" رو نمیده ؟ خوب این هم شامل کارکتر هست و غیر قابل قبول ...!
ممنون میشم کمکم کنید.
نقل قول: مشکل در متد Contains یک متغیر String
سلام.
اول اینکه واسه اینکه بدونید که توی یک رشته مقداری که میخواید وجود داره بهتره از متد IndexOf استفاده کنید.
دوم اینکه اگه متد رو فقط و فقط واسه این نوشتید که بیاد چک کنه که عدد هست یا خیر "کار عاقلانه ای نیست".
نقل قول: مشکل در متد Contains یک متغیر String
نقل قول:
نوشته شده توسط
_behnam_
سلام.
اول اینکه واسه اینکه بدونید که توی یک رشته مقداری که میخواید وجود داره بهتره از متد IndexOf استفاده کنید.
دوم اینکه اگه متد رو فقط و فقط واسه این نوشتید که بیاد چک کنه که عدد هست یا خیر "کار عاقلانه ای نیست".
ممنون از اینکه پاسخ دادید.
خوب به نظر شما چطوری چک کنم که فقط عدد بگیره ؟
ممنون میشم راهنماییم کنید.
نقل قول: مشکل در متد Contains یک متغیر String
با سلام.
میتوانید در یک حلقه تکتک کاراکتر ها را با متود Char.IsDigit چک کنید:
if((from ch in text where char.IsDigit(ch) select ch).Count()>0)
{
MessageBox.Show("string has number!");
}
نقل قول: مشکل در متد Contains یک متغیر String
نقل قول:
نوشته شده توسط
M.safa
با سلام.
میتوانید در یک حلقه تکتک کاراکتر ها را با متود Char.IsDigit چک کنید:
if((from ch in text where char.IsDigit(ch) select ch).Count()>0)
{
MessageBox.Show("string has number!");
}
ممنون از پاسختون دوست عزیز.
اما میشه یه توضیح بدید این کد رو ! یکم گنگه !
بعد این متد میگه اگر عدد وارد کنیم قبول نیست . ( دقیقا برعکس اون چیزی که من میخوام ! ).
ممنون میشم راهنماییم کنید.
نقل قول: مشکل در متد Contains یک متغیر String
این متد خوبی هست واسه کار شما.
private bool checkStr(string str)
{
System.Text.RegularExpressions.Regex Reg = new System.Text.RegularExpressions.Regex("^[0-9]+$");
return Reg.IsMatch(str);
}
نقل قول: مشکل در متد Contains یک متغیر String
private bool checkStr(string str)
{
System.Text.RegularExpressions.Regex Reg = new System.Text.RegularExpressions.Regex("^[0-9]+$");
return Reg.IsMatch(str);
}
[/QUOTE]
ممنون دوست عزیز. کد جالبی بود و البته منطقی تر از واسه من. !
اما این Regex("^[0-9]+$");
یعنی چی ؟ این پترنا رو چطوری میشه فهمید ؟ بر چه حثبی میشه نوشت ؟
بازم ممنون
نقل قول: مشکل در متد Contains یک متغیر String
bool IsNumeric1(string str)
{
if (string.IsNullOrWhiteSpace(str))
{
return false;
}
foreach (char ch in str)
{
if (!char.IsDigit(ch))
{
return false;
}
}
return true;
}
و یا
bool IsNumeric2(string str)
{
if (string.IsNullOrWhiteSpace(str))
{
return false;
}
return str.All(ch => char.IsDigit(ch));
}
نقل قول: مشکل در متد Contains یک متغیر String
به این روش میگم عبارات باقاعده یا عبارات منظم.
سرچ کنید در مورد عبارات باقاعده نتایج خوبی بدست میاد.
و برای الگوها اینجا سر بزنید.
نقل قول: مشکل در متد Contains یک متغیر String
نقل قول:
نوشته شده توسط
arash ghafori
ممنون از پاسختون دوست عزیز.
اما میشه یه توضیح بدید این کد رو ! یکم گنگه !
بعد این متد میگه اگر عدد وارد کنیم قبول نیست . ( دقیقا برعکس اون چیزی که من میخوام ! ).
ممنون میشم راهنماییم کنید.
بله می بخشید. در اون صورت یک ! به قبل از IsDigit اضافه میکنیم تا کاارکتر هایی که عدد نیستند جستجو شوند و در صورتی که تعدادشان بیشتر از 0 باشد شرط اجرا می شود که البته جناب Mahmoud.Afrad کاملتر مطرح کردند. روش جناب _behnam_ هم کاملا درست است.
نقل قول: مشکل در متد Contains یک متغیر String
از این تابع استفاده کن، خیلی راحت و بی دردسر:
private bool DigitCheck(string Input)
{
double Result;
return double.TryParse(Input, out Result);
}
نقل قول: مشکل در متد Contains یک متغیر String
نقل قول:
ممنون دوست عزیز. کد جالبی بود و البته منطقی تر از واسه من. !
اما این
Regex("^[0-9]+$");
یعنی چی ؟ این پترنا رو چطوری میشه فهمید ؟ بر چه حثبی میشه نوشت ؟
سلام
در عبارات باقاعده، ^ به معنی ابتدای رشته است یعنی اصرار داریم تا در ابتدای رشته تطبیق انجام شود.
[0-9[ یعنی فقط 0 تا 9 قابل قبول است (یعنی هر کاراکتری که به آن برمی خورد باید یکی از اینها باشد)
+ یعنی می تواند بیش از یکی باشد.
$ علامت خاتمه رشته است.
در گوگل Regular Expressions رو جستجو کن. نرم افزار RegexBuddy هم راهنمای عالی داره.
نقل قول: مشکل در متد Contains یک متغیر String