為了與 API 互動,我需要以 <string><space><number> 格式傳遞課程代碼。例如,MCTE 2333、CCUB 3621、BTE 1021。
是的,文本部分可以是 3 或 4 個字母。
大多數用戶輸入不帶空格的代碼,例如:MCTE2333。但這會導致 API 出錯。那么如何在字串和數字之間添加一個空格,使其遵循正確的格式。
uj5u.com熱心網友回復:
您可以使用正則運算式實作所需的行為:
void main() {
String a = "MCTE2333";
String aStr = a.replaceAll(RegExp(r'[^0-9]'), ''); //extract the number
String bStr = a.replaceAll(RegExp(r'[^A-Za-z]'), ''); //extract the character
print("$bStr $aStr"); //MCTE 2333
}
注意:無論您的用戶在字符和數字之間輸入多少空格,這都會產生相同的結果。
uj5u.com熱心網友回復:
試試這個。你必須給出兩個文本域。一個是名稱,即;MCTE一個是數字,即;1021. (對于此文本欄位,您必須僅更改鍵盤型別數字)。
之后,您可以將這些字串與它們之間的空格連接起來并發送到您的資料庫。這就像 hack 但它會起作用。
uj5u.com熱心網友回復:
向下滾動課程代碼串列,我注意到一些不尋常的格式。
示例:TQB 1001E,TQB 1001E等(末尾有額外的字母)
因此,這種特殊格式不適用于@Jahidul Islam 的回答。然而,受到他的回答的啟發,我設法想出了這個邏輯:
var code = "TQB2001M";
var i = course.indexOf(RegExp(r'[^A-Za-z]')); // get the index
var j = course.substring(0, i); // extract the first half
var k = course.substring(i).trim(); // extract the others
var formatted = '$j $k'.toUpperCase(); // combine & capitalize
print(formatted); // TQB 1011M
也適用于其他格式。在此處查看 DartPad 。
uj5u.com熱心網友回復:
這是您需要的整個邏輯(也適用于多個空格!):
void main() {
String courseCode= "MMM 111";
String parsedCourseCode = "";
if (courseCode.contains(" ")) {
final ensureSingleWhitespace = RegExp(r"(?! )\s | \s ");
parsedCourseCode = courseCode.split(ensureSingleWhitespace).join(" ");
} else {
final r1 = RegExp(r'[0-9]', caseSensitive: false);
final r2 = RegExp(r'[a-z]', caseSensitive: false);
final letters = courseCode.split(r1);
final numbers = courseCode.split(r2);
parsedCourseCode = "${letters[0].trim()} ${numbers.last}";
}
print(parsedCourseCode);
}
使用輸入值 (courseCode) 進行測驗 - 如果需要,也可以使用飛鏢墊。在提交/處理用戶的輸入表單之前,您只需將此邏輯添加到您的輸入值中:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/367332.html
下一篇:如何告訴dart不將map轉換為<String,String>型別而讓它成為<String,Object>型別?
