2010-02-15 19 views
16

मैंने कंसोल से एक स्ट्रिंग पढ़ी। मैं कैसे सुनिश्चित करूं कि इसमें केवल अंग्रेज़ी वर्ण और अंक हों?मैं कैसे सत्यापित करूं कि एक स्ट्रिंग अंग्रेजी में है?

+14

"अंग्रेजी अक्षर" आप (अकेले तथ्य यह है कि लिपियों और भाषाओं काफी अलग बातें हैं करते हैं और के लिए अंग्रेजी का उपयोग करता है क्या हैं लैटिन लिपि)? "भद्दा" एक पूरी तरह से मान्य अंग्रेजी शब्द है, फिर भी इसमें एक गैर-ASCII पत्र शामिल है। यदि आपका डोमेन वास्तव में "अंग्रेजी शब्दों की स्ट्रिंग" है तो आपको बस "ASCII अक्षरों और अंकों के तार" का अर्थ होने से अधिक सावधान रहना होगा। – Joey

+0

@ जोहान्स रोस्सेल अच्छा बिंदु! –

+1

थोड़ा सा अनुमान लगाया गया कि नौ लोग सोचते हैं कि यह प्रश्न 'उपयोगी और स्पष्ट' है जब "केवल अंग्रेज़ी वर्ण और अंक होते हैं" बहुत ही संदिग्ध है ... – AakashM

उत्तर

26

यह मानते हुए कि द्वारा "अंग्रेजी अक्षर" आप बस 26-चरित्र लैटिन वर्णमाला की बात कर रहे है, यह एक ऐसा क्षेत्र है किया जाएगा जहाँ मैं नियमित अभिव्यक्ति का प्रयोग करेंगे: ^[a-zA-Z0-9 ]*$

उदाहरण के लिए:

if(Regex.IsMatch(Console.ReadLine(), "^[a-zA-Z0-9]*$")) 
{ /* your code */ } 

इस मामले में नियमित अभिव्यक्तियों का लाभ यह है कि आप वास्तव में इस बात की परवाह करते हैं कि एक स्ट्रिंग पैटर्न से मेल खाती है या नहीं - यह वह जगह है जहां नियमित अभिव्यक्ति अद्भुत तरीके से काम करती है। यह स्पष्ट रूप से आपके इरादे को कैप्चर करता है, और यदि आप "अंग्रेजी वर्ण" की परिभाषा केवल 26 वर्णमाला से परे फैली हुई है तो विस्तार करना आसान है।

एक सभ्य series of articles here है जो नियमित अभिव्यक्तियों के बारे में अधिक पढ़ता है।

जोर्न शू-रोड का उत्तर यहां प्रस्तुत नियमित अभिव्यक्ति को आपके इनपुट से मेल खाने के तरीके के बारे में एक महान स्पष्टीकरण प्रदान करता है।

+3

आप सफेद जगह भी शामिल कर सकते हैं; दिए गए रेगेक्स पैटर्न के लिए "ए बी सी" झूठा रिटर्न देता है। –

+2

... और विराम चिह्न – Joe

+2

और इलिप्सिस वर्ण (...) या घुंघराले apostrophes जैसे फैंसी विराम चिह्नों के बारे में क्या? इनके अपने स्वयं के यूनिकोड वर्ण हैं। –

12

आप इस नियमित अभिव्यक्ति के खिलाफ यह मेल खा सकते हैं: ^[a-zA-Z0-9]*$

  • ^ स्ट्रिंग की शुरुआत से मेल खाता है कम या ऊपरी में (यानी कोई वर्ण इस बिंदु से पहले अनुमति दी जाती है)
  • [a-zA-Z0-9] मैचों az से किसी भी पत्र मामले, साथ ही 0-9 अंक
  • * पिछले मैच दोहराने शून्य या अधिक बार
  • $ सेंट के अंत से मेल खाता है की सुविधा देता है

    bool match = Regex.IsMatch(input, "^[a-zA-Z0-9]*$"); 
    

    आप हैं: अंगूठी (यानी कोई वर्ण इस बिंदु के बाद अनुमति दी जाती है)

एक सी # कार्यक्रम में अभिव्यक्ति का उपयोग करने के लिए आपको System.Text.RegularExpressions आयात और अपने कोड में कुछ इस तरह करने की आवश्यकता होगी

Regex pattern = new Regex("^[a-zA-Z0-9]*$", RegexOptions.Compiled); 

for (int i = 0; i < 1000; i++) 
{ 
    string input = Console.ReadLine(); 
    pattern.IsMatch(input); 
} 
+4

ध्यान दें कि इनपुट स्ट्रिंग में कोई स्थान होने पर यह पैटर्न गलत लौटाएगा। –

1
bool AllAscii(string str) 
{ 
    return !str.Any(c => !Char.IsLetterOrDigit(c)); 
} 
+0

यह निर्धारित करने के लिए अच्छा है कि स्ट्रिंग में एक अवैध वर्ण है ... – IAbstract

+13

IsLetterOrDigit किसी भी यूनिकोड अक्षर के लिए सच होगा। न केवल अंग्रेजी के लिए। क्या मैं सही हूँ? –

+0

मेरे परीक्षण के अनुसार यह झूठा परिणाम है। –

0

कुछ इस तरह: पैटर्न के खिलाफ लाइनों का एक बहुत परीक्षण करने के लिए जा रहे हैं, तो आप अभिव्यक्ति संकलित करने के लिए चाहते हो सकता है (यदि आप इनपुट को नियंत्रित करना चाहते हैं):

static string ReadLettersAndDigits() { 
    StringBuilder sb = new StringBuilder(); 
    ConsoleKeyInfo keyInfo; 
    while ((keyInfo = Console.ReadKey(true)).Key != ConsoleKey.Enter) { 
     char c = char.ToLower(keyInfo.KeyChar); 
     if (('a' <= c && c <= 'z') || char.IsDigit(c)) { 
      sb.Append(keyInfo.KeyChar); 
      Console.Write(c); 
     } 
    } 
    return sb.ToString(); 
} 
2

क्या आपके पास वेब एक्सेस है? मुझे लगता है कि इसकी गारंटी नहीं दी जा सकती है, लेकिन Google की एक भाषा एपीआई है जो आपके द्वारा पास की जाने वाली भाषा का पता लगाएगी। google language api

0

तो मुझे नहीं चाहता हूँ रेगुलर एक्सप्रेशन से उपयोग करने के लिए, और सिर्फ एक वैकल्पिक समाधान प्रदान करने के लिए, आप बस हर किरदार के लिए ASCII कोड की जांच कर सकते हैं और यह है कि सीमा के बीच स्थित है, यह या तो एक अंग्रेज़ी पत्र या एक नंबर होगा (यह सबसे अच्छा समाधान नहीं हो सकता है):

foreach (char ch in str.ToCharArray()) 
{ 
    int x = (int)char; 
    if (x >= 63 and x <= 126) 
    { 
     //this is english letter, i.e.- A, B, C, a, b, c... 
    } 
    else if(x >= 48 and x <= 57) 
    { 
     //this is number 
    } 
    else 
    { 
     //this is something diffrent 
    } 

} 

पूर्ण ASCII तालिका के लिए http://en.wikipedia.org/wiki/ASCII

लेकिन मुझे अभी भी लगता है, RegEx सबसे अच्छा समाधान है।

+1

यह गलत जवाब गलती से ASCII को "अंग्रेज़ी" के साथ conflates। – tchrist

0

मैं नियमित अभिव्यक्ति उत्तरों से सहमत हूं। हालांकि, आप इसे "^ [\ w] + $" तक सरल बना सकते हैं। \ w कोई भी "शब्द चरित्र" (जो एक गैर-यूनिकोड वर्णमाला का उपयोग करता है] का अनुवाद करता है। मुझे नहीं पता कि आप अंडरस्कोर भी चाहते हैं।

में regexes पर अधिक यहाँ .net:। http://msdn.microsoft.com/en-us/library/ms972966.aspx#regexnet_topic8

0
bool onlyEnglishCharacters = !EnglishText.Any(a => a > '~'); 

सस्ता लगता है, लेकिन यह मेरे लिए काम किया, कानूनी आसान जवाब आशा है कि किसी को भी यह मदद करता है

+1

'एनयूएल', 'बीईएल' और अन्य कम अंत ASCII वर्ण सभी" ~ "से कम हैं - जो इसे होने की अपेक्षा अधिक भंगुर बनाता है।एक '|| जोड़ें एक <'0'' और आप समाधान के करीब होंगे :-) –

0

के रूप में कई ने कहा, स्वीकार किए जाते हैं जवाब ही काम करता है अगर वहाँ एक शब्द है। स्ट्रिंग में। ऐसे कोई जवाब नहीं हैं जो स्ट्रिंग में कई शब्दों या यहां तक ​​कि वाक्यों के मामले को कवर करते हैं, यहां कोड है:

stringToCheck.Any(x=> char.IsLetter(x) && !((int)x >= 63 && (int)x <= 126)); 
1

एक और तरीका यह जांचना है कि IsLower और IsUpper दोनों सही नहीं हैं या नहीं। कुछ की तरह:

private bool IsAllCharEnglish(string Input) 
    { 
     foreach (var item in Input.ToCharArray()) 
     { 
      if (!char.IsLower(item) && !char.IsUpper(item) && !char.IsDigit(item) && !char.IsWhiteSpace(item)) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 

और उपयोग के लिए यह:

 string str = "فارسی abc"; 
     IsAllCharEnglish(str); // return false 
     str = "These are english 123"; 
     IsAllCharEnglish(str); // return true 
0
<?php 
    $string="हिन्दी"; 
    $string="Manvendra Rajpurohit"; 
    echo strlen($string); echo '<br>'; 
    echo mb_strlen($string, 'utf-8'); 
    echo '<br>'; 
    if(strlen($string) != mb_strlen($string, 'utf-8')) 
    { 
     echo "Please enter English words only:("; 
    } 
    else { 
     echo "OK, English Detected!"; 
    } 
?> 
+0

इस सरल चाल का प्रयास करें और मुझे यकीन है कि आप इसका आनंद लेंगे .. –

संबंधित मुद्दे

 संबंधित मुद्दे