|
|
AIWROKÈí¼þÕýÔòÓ÷¨Êµ¼ÊÀý×Ó
- /*
- * AIWROK ÕýÔò±í´ïʽ¸ß¼¶Ó¦ÓÃϵͳ
- * ES5ϵͳ°²×¿ JavaScriptÒýÇæRhino
- * ½»Á÷QQȺ711841924Ⱥһ£¬Æ»¹ûÄÚ²âȺ£¬528816639
- * °¸Àý£ºÓû§Êý¾Ý´¦ÀíÓë·ÖÎö×ÛºÏÆ½Ì¨
- */
- // ¸ß¼¶Êý¾ÝÑé֤ϵͳ
- var AdvancedValidationSystem = {
- // ÑéÖ¤¹æÔò¿â - °üº¬¸ü¸´ÔÓµÄģʽƥÅä
- rules: {
- // ¸´ÔÓÓÊÏäÑéÖ¤£¨Ö§³Ö¹ú¼Ê»¯ÓòÃû£©
- email: /^[a-zA-Z0-9._%+-]+@(?:[a-zA-Z0-9-]+\.)+(?:[a-zA-Z]{2,}|xn--[a-zA-Z0-9]+)$/i,
-
- // ¹ú¼ÊÊÖ»úºÅÑéÖ¤£¨Ö§³Ö¶àÖÖ¸ñʽ£©
- internationalPhone: /^\+?[1-9]\d{1,14}$/,
-
- // Öйú´ó½ÊÖ»úºÅÑéÖ¤£¨¸üÑϸñµÄ¸ñʽ£©
- cnPhone: /^1[3-9]\d{9}$/,
-
- // ¸´ÔÓURLÑéÖ¤£¨Ö§³ÖIPv4µØÖ·ºÍ¶Ë¿ÚºÅ£©
- url: /^(https?:\/\/)?(?:www\.)?[a-zA-Z0-9.-]+(?:\.[a-zA-Z]{2,})+(?:\/[\w\-.~:/?#@![ DISCUZ_CODE_2 ]amp;'\(\)*+,;=]*)?$/i,
-
- // ÈÕÆÚʱ¼äÑéÖ¤£¨Ö§³Ö¶àÖÖ¸ñʽ£©
- datetime: /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])(?:\s+\d{2}:\d{2}(?::\d{2})?)?$/,
-
- // Éí·ÝÖ¤ºÅÑéÖ¤£¨Ö§³Ö15λºÍ18룩
- idCard: /^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}(?:\d|X|x)$/,
-
- // ¸´ÔÓÓû§ÃûÑéÖ¤£¨Ö§³ÖÖÐÎÄ¡¢×Öĸ¡¢Êý×Ö¡¢Ï»®Ïߣ¬4-20룩
- username: /^[\u4e00-\u9fa5a-zA-Z0-9_]{4,20}$/,
-
- // ÃÜÂëÇ¿¶È¸ß¼¶ÑéÖ¤
- strongPassword: /^[A-Za-z\d@$!%*?&]{8,}$/,
-
- // IPv4µØÖ·ÑéÖ¤
- ipv4: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,
-
- // ÒøÐп¨ºÅÑéÖ¤£¨LuhnË㷨ǰµÄ¸ñʽÑéÖ¤£©
- bankCard: /^[0-9]{16,19}$/
- },
-
- // Ö´ÐÐÑéÖ¤
- validate: function(data, field, customRule) {
- var rule = customRule || this.rules[field];
- if (!rule) {
- throw new Error("Validation rule not found: " + field);
- }
- return rule.test(data);
- },
-
- // ÅúÁ¿ÑéÖ¤
- validateBatch: function(data, rules) {
- var results = {};
- for (var field in rules) {
- if (rules.hasOwnProperty(field)) {
- results[field] = this.validate(data[field], field, rules[field]);
- }
- }
- return results;
- }
- };
- // ¸´ÔÓÎı¾ÄÚÈÝ·ÖÎöÓëÐÅÏ¢Ìáȡϵͳ
- var TextAnalysisSystem = {
- // Ìáȡָ¶¨ÀàÐ͵ÄÐÅÏ¢
- extract: function(text, type) {
- var patterns = {
- emails: /[a-zA-Z0-9._%+-]+@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}|xn--[a-zA-Z0-9]+)/gi,
- phones: /\+?[1-9]\d{1,14}/g,
- cnPhones: /1[3-9]\d{9}/g,
- urls: /(https?:\/\/[\w\-.~:/?#@![ DISCUZ_CODE_2 ]amp;'\(\)*+,;=]+)/g,
- dates: /\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])/g,
- versions: /v?\d+\.\d+\.\d+(-\w+)?/g,
- numbers: /-?\d+(\.\d+)?/g,
- ipAddresses: /((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/g
- };
-
- var pattern = patterns[type];
- if (!pattern) {
- throw new Error("Extract type not supported: " + type);
- }
-
- return text.match(pattern) || [];
- },
-
- // ·ÖÎöÎı¾½á¹¹
- analyzeStructure: function(text) {
- var lines = text.split("\n");
- var paragraphs = text.split(/\n\s*\n/);
-
- return {
- totalCharacters: text.length,
- totalWords: text.split(/\s+/).filter(function(word) { return word.length > 0; }).length,
- totalLines: lines.length,
- totalParagraphs: paragraphs.length,
- averageWordsPerLine: Math.round((text.split(/\s+/).length / lines.length) * 100) / 100,
- averageWordsPerParagraph: Math.round((text.split(/\s+/).length / paragraphs.length) * 100) / 100
- };
- },
-
- // ¹Ø¼ü´ÊƵÂÊͳ¼Æ
- keywordFrequency: function(text, keywords) {
- var frequencies = {};
- var textLower = text.toLowerCase();
-
- keywords.forEach(function(keyword) {
- var pattern = new RegExp(keyword.toLowerCase(), "g");
- frequencies[keyword] = (textLower.match(pattern) || []).length;
- });
-
- return frequencies;
- }
- };
- // Êý¾ÝÇåÏ´Óë±ê×¼»¯ÏµÍ³
- var DataCleaningSystem = {
- // ±ê×¼»¯ÊÖ»úºÅ¸ñʽ
- standardizePhone: function(phone) {
- // È¥³ýËùÓзÇÊý×ֺͼӺÅ
- var cleaned = phone.replace(/[^\d+]/g, "");
-
- // ±ê×¼»¯¹ú¼ÊÊÖ»úºÅ¸ñʽ
- if (cleaned.indexOf("+") === -1 && cleaned.length === 11 && cleaned.charAt(0) === "1") {
- return "+86" + cleaned;
- }
-
- return cleaned;
- },
-
- // ±ê×¼»¯ÈÕÆÚ¸ñʽ
- standardizeDate: function(date) {
- // ½«¸÷ÖÖÈÕÆÚ¸ñʽת»»ÎªYYYY-MM-DD
- var patterns = [
- /^(\d{4})\/(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])$/, // YYYY/MM/DD
- /^(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/, // YYYY-MM-DD
- /^(0[1-9]|[12]\d|3[01])\/(0[1-9]|1[0-2])\/(\d{4})$/ // DD/MM/YYYY
- ];
-
- for (var i = 0; i < patterns.length; i++) {
- var match = date.match(patterns[i]);
- if (match) {
- if (i === 2) { // DD/MM/YYYY ¸ñʽ
- return match[3] + "-" + match[2] + "-" + match[1];
- }
- return match[1] + "-" + match[2] + "-" + match[3];
- }
- }
-
- return date; // ·µ»ØÔʼÈÕÆÚ£¬Èç¹ûÎÞ·¨±ê×¼»¯
- },
-
- // Çå³ýHTML±êÇ©
- stripHtml: function(html) {
- return html.replace(/<[^>]+>/g, "");
- },
-
- // È¥³ý¶àÓà¿Õ¸ñºÍ»»ÐÐ
- normalizeWhitespace: function(text) {
- return text.replace(/\s+/g, " ").trim();
- },
-
- // ÌáÈ¡²¢±ê×¼»¯¹Ø¼üÐÅÏ¢
- extractAndStandardize: function(text) {
- var extracted = {
- emails: this.extractUnique(text, /[a-zA-Z0-9._%+-]+@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}|xn--[a-zA-Z0-9]+)/gi),
- phones: this.extractUnique(text, /\+?[1-9]\d{1,14}/g).map(this.standardizePhone),
- urls: this.extractUnique(text, /(https?:\/\/[\w\-.~:/?#@![ DISCUZ_CODE_2 ]amp;'\(\)*+,;=]+)/g),
- dates: this.extractUnique(text, /\d{4}[\/-](0[1-9]|1[0-2])[\/-](0[1-9]|[12]\d|3[01])/g).map(this.standardizeDate)
- };
-
- return extracted;
- },
-
- // ÌáȡΨһֵ
- extractUnique: function(text, pattern) {
- var matches = text.match(pattern) || [];
- var unique = {};
-
- matches.forEach(function(match) {
- unique[match.toLowerCase()] = match;
- });
-
- return Object.keys(unique).map(function(key) {
- return unique[key];
- });
- }
- };
- // ÈÕÖ¾·ÖÎöÓë¼à¿ØÏµÍ³
- var LogAnalysisSystem = {
- // Ìáȡָ¶¨¼¶±ðµÄÈÕÖ¾
- extractLogsByLevel: function(logs, level) {
- var pattern = new RegExp("\[[^\]]+\] " + level + ": [^\n]+", "g");
- return logs.match(pattern) || [];
- },
-
- // ½âÎöÈÕÖ¾ÌõÄ¿
- parseLogEntry: function(logEntry) {
- var pattern = /\[([^\]]+)\]\s*(\w+):\s*([^-]+)-(.*)/;
- var match = logEntry.match(pattern);
-
- if (!match) {
- return null;
- }
-
- var entry = {
- timestamp: match[1],
- level: match[2],
- message: match[3].trim(),
- details: {}
- };
-
- // ½âÎöÏêϸÐÅÏ¢
- var details = match[4].split(", ");
- details.forEach(function(detail) {
- var parts = detail.split(": ");
- if (parts.length === 2) {
- entry.details[parts[0].trim()] = parts[1].trim();
- }
- });
-
- return entry;
- },
-
- // ͳ¼ÆÈÕÖ¾ÐÅÏ¢
- analyzeLogs: function(logs) {
- var levels = {
- INFO: (logs.match(/INFO:/g) || []).length,
- ERROR: (logs.match(/ERROR:/g) || []).length,
- WARN: (logs.match(/WARN:/g) || []).length,
- DEBUG: (logs.match(/DEBUG:/g) || []).length
- };
-
- var errorPattern = /ERROR: [^\n]+/g;
- var errors = logs.match(errorPattern) || [];
-
- // ÌáÈ¡ËùÓдíÎó´úÂë
- var errorCodes = [];
- errors.forEach(function(error) {
- var codeMatch = error.match(/code: (\d+)/);
- if (codeMatch) {
- errorCodes.push(codeMatch[1]);
- }
- });
-
- return {
- totalLogs: logs.split("\n").length,
- levels: levels,
- totalErrors: errors.length,
- errorCodes: this.countUnique(errorCodes)
- };
- },
-
- // ͳ¼ÆÎ¨Ò»Öµ
- countUnique: function(arr) {
- var counts = {};
- arr.forEach(function(item) {
- counts[item] = (counts[item] || 0) + 1;
- });
- return counts;
- }
- };
- // ¸ß¼¶Ä£°åÒýÇæÓëÌæ»»ÏµÍ³
- var TemplateEngine = {
- // Ìæ»»Ä£°å±äÁ¿
- render: function(template, data) {
- return template.replace(/\{\{([^}]+)\}\}/g, function(match, key) {
- return data[key] || match;
- });
- },
-
- // ´ø¹ýÂËÆ÷µÄÄ£°åÌæ»»
- renderWithFilters: function(template, data, filters) {
- return template.replace(/\{\{([^|}]+)(\|([^}]+))?\}\}/g, function(match, key, filterWithPipe, filterName) {
- var value = data[key] || match;
-
- if (filterName && filters[filterName]) {
- return filters[filterName](value);
- }
-
- return value;
- });
- },
-
- // ÕýÔò±í´ïʽÅúÁ¿Ìæ»»
- batchReplace: function(text, replacements) {
- for (var pattern in replacements) {
- if (replacements.hasOwnProperty(pattern)) {
- var regex = new RegExp(pattern, "g");
- text = text.replace(regex, replacements[pattern]);
- }
- }
- return text;
- }
- };
- // ¸ß¼¶ÃÜÂ밲ȫϵͳ
- var PasswordSecuritySystem = {
- // ¼ì²éÃÜÂëÇ¿¶È
- checkStrength: function(password) {
- var strength = 0;
- var feedback = [];
-
- // ³¤¶È¼ì²é
- if (password.length >= 12) {
- strength += 25;
- } else if (password.length >= 8) {
- strength += 15;
- } else {
- feedback.push("ÃÜÂ볤¶ÈÖÁÉÙ8λ");
- }
-
- // °üº¬Ð¡Ð´×Öĸ
- if (/[a-z]/.test(password)) {
- strength += 20;
- } else {
- feedback.push("°üº¬Ð¡Ð´×Öĸ");
- }
-
- // °üº¬´óд×Öĸ
- if (/[A-Z]/.test(password)) {
- strength += 20;
- } else {
- feedback.push("°üº¬´óд×Öĸ");
- }
-
- // °üº¬Êý×Ö
- if (/\d/.test(password)) {
- strength += 15;
- } else {
- feedback.push("°üº¬Êý×Ö");
- }
-
- // °üº¬ÌØÊâ×Ö·û
- if (/[^a-zA-Z0-9]/.test(password)) {
- strength += 20;
- } else {
- feedback.push("°üº¬ÌØÊâ×Ö·û");
- }
-
- // ¼ì²é³£¼ûÃÜÂë
- var commonPasswords = ["password", "123456", "qwerty", "admin", "12345678"];
- if (commonPasswords.indexOf(password.toLowerCase()) !== -1) {
- strength = 0;
- feedback.unshift("±ÜÃâʹÓó£¼ûÃÜÂë");
- }
-
- // ¼ì²éÁ¬Ðø×Ö·û
- if (/\d{3,}|[a-zA-Z]{3,}/.test(password)) {
- strength -= 10;
- feedback.push("±ÜÃâÁ¬Ðø×Ö·û");
- }
-
- return {
- strength: Math.max(0, strength),
- feedback: feedback,
- level: strength >= 80 ? "¼«Ç¿" : strength >= 60 ? "Ç¿" : strength >= 40 ? "ÖÐ" : "Èõ"
- };
- },
-
- // Éú³ÉÃÜÂëÇ¿¶È½¨Òé
- generateSuggestions: function() {
- return [
- "ʹÓÃ12λÒÔÉϵÄÃÜÂë",
- "×éºÏʹÓôóСд×Öĸ",
- "°üº¬Êý×ÖºÍÌØÊâ×Ö·û",
- "±ÜÃâʹÓó£¼ûµ¥´Ê",
- "¶¨ÆÚ¸ü»»ÃÜÂë",
- "²»ÒªÔÚ¶à¸öÍøÕ¾Ê¹ÓÃÏàͬÃÜÂë"
- ];
- }
- };
- // ÕýÔò±í´ïʽÐÔÄÜ·ÖÎöÓëÓÅ»¯ÏµÍ³
- var RegexPerformanceSystem = {
- // ÐÔÄÜ»ù×¼²âÊÔ
- benchmark: function(pattern, text, iterations) {
- iterations = iterations || 1000;
- var regex = new RegExp(pattern, "g");
- var startTime = new Date().getTime();
-
- for (var i = 0; i < iterations; i++) {
- text.match(regex);
- }
-
- var endTime = new Date().getTime();
- return {
- pattern: pattern,
- iterations: iterations,
- time: endTime - startTime,
- averageTime: (endTime - startTime) / iterations + "ms/´Î"
- };
- },
-
- // ±È½Ï²»Í¬ÕýÔò±í´ïʽµÄÐÔÄÜ
- comparePatterns: function(patterns, text, iterations) {
- var results = [];
-
- for (var i = 0; i < patterns.length; i++) {
- results.push(this.benchmark(patterns[i], text, iterations));
- }
-
- // °´ÐÔÄÜÅÅÐò
- results.sort(function(a, b) {
- return a.time - b.time;
- });
-
- return results;
- },
-
- // ÓÅ»¯ÕýÔò±í´ïʽ½¨Òé
- getOptimizationTips: function() {
- return [
- "ʹÓþ«È·µÄ×Ö·ûÀà´úÌæÍ¨Åä·û",
- "ʹÓ÷Dz¶»ñ×é(?:...)´úÌæ²¶»ñ×é(...)£¬µ±²»ÐèÒªÌáÈ¡Êý¾Ýʱ",
- "ʹÓÃ^ºÍ$êµãÏÞÖÆÆ¥Å䷶Χ",
- "±ÜÃâ¹ý¶ÈʹÓûØËÝ£¬ÈçǶÌ×Á¿´Ê",
- "ʹÓÃÔ¤±àÒëÕýÔò±í´ïʽÌá¸ßÐÔÄÜ",
- "¶ÔÓÚÆµ·±Ê¹ÓõÄģʽ£¬¿¼ÂÇʹÓÃ×Ö·û´®·½·¨´úÌæÕýÔò±í´ïʽ"
- ];
- }
- };
- // ×ÛºÏÓ¦ÓÃʾÀý
- function runComprehensiveExample() {
- printl("AIWROK ÕýÔò±í´ïʽ¸ß¼¶Ó¦ÓÃϵͳ", "");
-
- // 1. ¸ß¼¶Êý¾ÝÑé֤ʾÀý
- printl("1. ¸ß¼¶Êý¾ÝÑé֤ʾÀý", "");
- var userData = {
- email: "user@example.com.cn",
- cnPhone: "13812345678",
- url: "https://www.aiwrok.com",
- datetime: "1990-01-15",
- idCard: "110101199001151234"
- };
-
- for (var key in userData) {
- if (userData.hasOwnProperty(key)) {
- var isValid = AdvancedValidationSystem.validate(userData[key], key);
- printl(key, userData[key] + " => " + (isValid ? "ÓÐЧ" : "ÎÞЧ"));
- }
- }
-
- // 2. Îı¾ÄÚÈÝ·ÖÎöʾÀý
- printl("2. Îı¾ÄÚÈÝ·ÖÎöʾÀý", "");
- var sampleText = "AIWROK·¢²¼ÓÚ2024Äê1ÔÂ15ÈÕ£¬¹Ù·½ÍøÕ¾ÊÇhttps://www.aiwrok.com¡£\n" +
- "ÁªÏµÓÊÏ䣺support@aiwrok.com£¬¿Í·þµç»°£º400-888-8888¡£\n" +
- "Óû§¿ÉÒÔͨ¹ýÊÖ»úºÅ13812345678»òÓÊÏäuser@example.com×¢²á¡£\n" +
- "Ö§³ÖµÄ¹¦ÄܰüÀ¨£º×Ô¶¯µã»÷¡¢Îı¾Ê¶±ð¡¢Í¼Ïñ´¦ÀíµÈ¡£\n" +
- "°æ±¾ÀúÊ·£ºv1.0.0(2024-01-15), v1.1.0(2024-03-20), v2.0.0(2024-06-10)";
-
- var extractedEmails = TextAnalysisSystem.extract(sampleText, "emails");
- var extractedPhones = TextAnalysisSystem.extract(sampleText, "cnPhones");
- var extractedUrls = TextAnalysisSystem.extract(sampleText, "urls");
-
- printl("ÌáÈ¡µ½µÄÓÊÏä", extractedEmails);
- printl("ÌáÈ¡µ½µÄÊÖ»úºÅ", extractedPhones);
- printl("ÌáÈ¡µ½µÄÍøÖ·", extractedUrls);
-
- // 3. Êý¾ÝÇåÏ´Óë±ê×¼»¯Ê¾Àý
- printl("3. Êý¾ÝÇåÏ´Óë±ê×¼»¯Ê¾Àý", "");
- var messyData = "ÁªÏµÐÅÏ¢£º 13812345678 (ÊÖ»ú) £¬ÓÊÏ䣺USER@EXAMPLE.COM \n" +
- "×¢²áÈÕÆÚ£º2024/01/15 £¬ÍøÕ¾£ºHTTPS://WWW.AIWROK.COM/path\n" +
- "IPµØÖ·£º192.168.1.1£¬ÁíÒ»¸öÓÊÏ䣺admin@aiwrok.com";
-
- var cleanedData = DataCleaningSystem.extractAndStandardize(messyData);
- printl("ÇåÏ´ºóµÄÓÊÏä", cleanedData.emails);
- printl("ÇåÏ´ºóµÄÊÖ»úºÅ", cleanedData.phones);
- printl("ÇåÏ´ºóµÄÈÕÆÚ", cleanedData.dates);
-
- // 4. ÈÕÖ¾·ÖÎöʾÀý
- printl("4. ÈÕÖ¾·ÖÎöʾÀý", "");
- var sampleLogs = "[2024-01-15 10:30:25] INFO: Óû§µÇ¼³É¹¦ - userId: 12345[2024-01-15 10:31:45] ERROR: Êý¾Ý¿âÁ¬½Óʧ°Ü - code: 500, message: connection timeout[2024-01-15 10:32:10] WARN: ´ÅÅ̿ռ䲻×ã - used: 85%, threshold: 80%[2024-01-15 10:33:00] INFO: ÎļþÉÏ´«Íê³É - filename: report.pdf, size: 2.5MB[2024-01-15 10:34:22] ERROR: APIÇëÇóʧ°Ü - url: /api/user, code: 404, message: not found";
- var errorLogs = LogAnalysisSystem.extractLogsByLevel(sampleLogs, "ERROR");
- var logStats = LogAnalysisSystem.analyzeLogs(sampleLogs);
- printl("ERRORÈÕÖ¾ÊýÁ¿", errorLogs.length);
- printl("ÈÕÖ¾¼¶±ðͳ¼Æ", logStats.levels);
-
- // 5. Ä£°åÒýÇæÊ¾Àý
- printl("5. Ä£°åÒýÇæÊ¾Àý", "");
- var template = "×ð¾´µÄ{{username}}£¬ÄúµÄ¶©µ¥#{{orderId}}ÒÑ·¢»õ¡£\n" +
- "Ô¤¼ÆËÍ´ïʱ¼ä£º{{deliveryDate}}£¬ÎïÁ÷µ¥ºÅ£º{{trackingNumber}}¡£\n" +
- "½ð¶î£º{{amount|currency}}Ôª";
-
- var orderData = {
- username: "ÕÅÈý",
- orderId: "ORD20240115001",
- deliveryDate: "2024-01-20",
- trackingNumber: "SF1234567890",
- amount: 299.99
- };
-
- var filters = {
- currency: function(value) {
- return parseFloat(value).toFixed(2);
- }
- };
-
- var rendered = TemplateEngine.renderWithFilters(template, orderData, filters);
- printl("äÖȾºóµÄÄ£°å", rendered);
-
- // 6. ÃÜÂëÇ¿¶È¼ì²éʾÀý
- printl("6. ÃÜÂëÇ¿¶È¼ì²éʾÀý", "");
- var testPasswords = ["123456", "password", "Password123", "P@ssw0rd!2024", "C0mpl3xP@ssw0rd2024"];
-
- testPasswords.forEach(function(pwd) {
- var result = PasswordSecuritySystem.checkStrength(pwd);
- printl("ÃÜÂë '" + pwd + "'", "Ç¿¶È£º" + result.strength + "% (" + result.level + ")");
- });
-
- printl("AIWROK ÕýÔò±í´ïʽ¸ß¼¶Ó¦ÓÃϵͳÍê³É", "");
- }
- // Ö´ÐÐ×ÛºÏʾÀý
- runComprehensiveExample();
¸´ÖÆ´úÂë
|
|