2011-02-03 6 views
1

私のiPhoneプロジェクトでは、Javascript関数を使用するか正規表現を使用して文字列を検証する必要がありました。このコードはjQueryのコードからJavaScriptと正規表現を使用して試験したiPhone - UIWebViewを使用してJavaScriptと正規表現を評価する

http://docs.jquery.com/Plugins/Validation/Methods/email http://docs.jquery.com/Plugins/Validation/Methods/url http://docs.jquery.com/Plugins/Validation/Methods/date ます。http://docs.jquery。 COM /プラグイン/検証/メソッド/ dateISO http://docs.jquery.com/Plugins/Validation/Methods/number http://docs.jquery.com/Plugins/Validation/Methods/digits http://docs.jquery.com/Plugins/Validation/Methods/creditcard

私は完全なソリューションを検索し、おそらくそれを逃したので、私はすることを決めましたNSString + JavaScript + RegExを実装してください。

私はここで

Reuven

答えて

2

は、コードリストは、あるあなたが見つけることを願って...場合には、それは誰にも価値があります、以下の答えとして、それを掲載しましたが便利です:

//

@interface NSString(JavaScript_RegEx) 

// Built-in rules 
+ (NSArray*) emailRule; 
+ (NSArray*) urlRule; 
+ (NSArray*) dateRule; 
+ (NSArray*) dateISORule; 
+ (NSArray*) numberRule; 
+ (NSArray*) digitsRule; 
+ (NSArray*) creditcardRule; 

- (NSString*) javascriptValue; 
- (NSString*) regexTestValue:(NSString*)value; 

@end 

// 01 // // NSStringの+のJavaScript + RegEx.h // NSStringの+のJavaScript + RegEx.m //

#import "NSString+JavaScript+RegEx.h" 

@implementation NSString(JavaScript_RegEx) 

static NSString* kUIWebViewWrapperForJS = @"(function() {\ntry {\n%@\n}\ncatch (err)\n{\nreturn err;\n}\n})();"; 
static NSString* kJSWrapperForRegEx = @"re = new RegExp(/%@/); return re.test('%@')"; 

+ (NSArray*) emailRule { 
    return [NSArray arrayWithObjects:[NSNumber numberWithInt:0], // 0=RegEx 
      @"^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?$", 
      @"Please enter a valid email address.", 
      nil]; 
} 

+ (NSArray*) urlRule { 
    return [NSArray arrayWithObjects:[NSNumber numberWithInt:0], // 0=RegEx 
      @"^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$", 
      @"Please enter a valid URL.", 
      nil]; 
} 

+ (NSArray*) dateRule { 
    return [NSArray arrayWithObjects:[NSNumber numberWithInt:1], // 1=JS 
      @"return !/Invalid|NaN/.test(new Date(\"%@\"));", // expect a date 
      @"Please enter a valid date.", 
      nil]; 
} 

+ (NSArray*) dateISORule { 
    return [NSArray arrayWithObjects:[NSNumber numberWithInt:0], // 0=RegEx 
      @"^\\d{4}[\\/-]\\d{1,2}[\\/-]\\d{1,2}$", 
      @"Please enter a valid date.", 
      nil]; 
} 

+ (NSArray*) numberRule { 
    return [NSArray arrayWithObjects:[NSNumber numberWithInt:0], // 0=RegEx 
      @"^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)(?:\\.\\d+)?$", 
      @"Please enter a valid number.", 
      nil]; 
} 

+ (NSArray*) digitsRule { 
    return [NSArray arrayWithObjects:[NSNumber numberWithInt:0], // 0=RegEx 
      @"^\\d+$", 
      @"Please enter only digits.", 
      nil]; 
} 

+ (NSArray*) creditcardRule { 
    return [NSArray arrayWithObjects:[NSNumber numberWithInt:1], // 1=JS 
      @"// accept only digits and dashes\n" 
      "var value = \"%@\";\n" 
      "if (/[^0-9-]+/.test(value))\n" 
      " return false;\n" 
      "var nCheck = 0, nDigit = 0, bEven = false;\n" 
      "value = value.replace(/\\D/g, \"\");\n" 
      "for (var n = value.length - 1; n >= 0; n--) {\n" 
      " var cDigit = value.charAt(n);\n" 
      " var nDigit = parseInt(cDigit, 10);\n" 
      " if (bEven) {\n" 
      " if ((nDigit *= 2) > 9)\n" 
      "  nDigit -= 9;\n" 
      " }\n" 
      " nCheck += nDigit;\n" 
      " bEven = !bEven;\n" 
      "}\n" 
      "return (nCheck %% 10) == 0;", 
      @"Please enter a valid credit card number.", 
      nil]; 
} 

- (NSString*) javascriptValue { 
    NSString* jsForWebView = [NSString stringWithFormat:kUIWebViewWrapperForJS, self]; // convert to "JS-edible-by-UIWebView" 

    UIWebView *wb = [[[UIWebView alloc] init] autorelease]; 
    //NSLog(@"%s\n%@\n", __FUNCTION__, jsForWebView); 
    NSString* result = [wb stringByEvaluatingJavaScriptFromString:jsForWebView]; 
    return result; 
} 

- (NSString*) regexTestValue:(NSString*)value { 
    NSString* javascriptWrappedRegEx = [NSString stringWithFormat:kJSWrapperForRegEx, self, value]; 
    NSString* result = [javascriptWrappedRegEx javascriptValue]; 
    return result; 
} 

@end 

お楽しみください、Reuven

0

では、次のUIWebViewインスタンスメソッドを試してみましたか?

- (NSString *) stringByEvaluatingJavaScriptFromString: (NSString *) script 
+0

はい、あります。下の私のクラスでは(自分の質問に対する答えとして投稿し、他の人には役立つことを願って...)私はそれを使用しています。 – Reuven

+0

当然のことながら、これは疑問ではなく、このウェブサイトに掲載すべきではありません! –

+0

サイトのエチケットを悪用/悪用する可能性があり、申し訳ありません。私はこのサイトで答えを探していて見つけられず、自分自身を書くように導いてくれました。私がサイト上で答えを見つけることができなかったので、私は他人が完全な答えを探しているかもしれないと思って、私の答えが価値があることを望んでいた。 – Reuven

関連する問題