تحقق مما إذا كان النص المدخل يستخدم الحروف الإنجليزية فقط

StackOverflow https://stackoverflow.com/questions/2013288

  •  19-09-2019
  •  | 
  •  

سؤال

أنا أعمل على تطبيق iPhone وتحتاج إلى التأكد من أن النص الذي تم إدخاله يتكون من z والأرقام فقط.

لا أريد المستخدم استخدام أحرف لغات أخرى مثل تلك التي لديها لهجات أو النقاط فوقها.

تحرير: أنا جديد في هذا regex، لذلك إذا كنت من فضلك أعطني رمز أو رابط، سأكون ممتنا حقا.

هل كانت مفيدة؟

المحلول

استخدام تعبير منتظم، مثل [0-9a-zA-Z]+. وبعد تفحص ال Regexkit Framework. بالنسبة إلى الهدف C، مكتبة تعبير منتظمة تعمل على iPhone.

يمكنك بعد ذلك القيام بشيء مثل:

NSString *str = @"abc0129yourcontent";
BOOL isMatch = [str isMatchedByRegex:@"^[0-9a-zA-Z]+$"];

نصائح أخرى

نهج آخر واحد (قد يكون غير أنيق كما هو الحال مع Regex):

    NSCharacterSet* tSet = [NSCharacterSet characterSetWithCharactersInString:
               @"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"];
    NSCharacterSet* invSet = [tSet invertedSet];
    NSString* legalS = @"abcdA1";
    NSString* illegalS = @"asvéq1";

    if ([legalS rangeOfCharacterFromSet:invSet].location != NSNotFound)
        NSLog(legalS); // not printed

    if ([illegalS rangeOfCharacterFromSet:invSet].location != NSNotFound)
        NSLog(illegalS); // printed

أبسط طريقة - على افتراض أنك تريد السماح بعلامات الترقيم أيضا هي التحقق من أن جميع الأحرف بين قيم ASCII 32 (الفضاء) و 126 (~). ال طاولة ASCII يوضح النقطة.

جميع الشخصيات المعلمة هي ما اعتدنا على الاتصال ب ASCII "عالية" عندما بدأت البرمجة لأول مرة.

إذا كنت لا ترغب في السماح بعلامات الترقيم، فسيتعين عليك القيام بعدة شيكات النطاق:

48 إلى 57 للأرقام

65 إلى 90 للحالات العليا

97 إلى 122 لحالة صغيرة

والتي قد تجعل نهج ريجيكس قابل للقراءة (لا أستطيع أن أصدق أنني كتبت فقط ذلك)

تنفيذ سهل (خذ من الأعلى، الذي تم تحريره فقط لنسخ سريع):

ج موضوعية:

BOOL onlyEnglishAlphanumerical = ([self.textField.text rangeOfCharacterFromSet:[[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"] invertedSet]].location == NSNotFound);
self.textField.layer.borderWidth = (onlyEnglishAlphanumerical) ? 0 : 1;
if (onlyEnglishAlphanumerical)
{
    //Do the deal
}

سويفت:

if (self.textField.text.rangeOfCharacterFromSet(NSCharacterSet.init(charactersInString:"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet) == nil)
{
    //Do the deal
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top