@@ -34,5 +34,49 @@ bool SearchFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &
3434
3535 QString searchPatternDelBlank = searchPattern.pattern ().toLower ().remove (" " );
3636
37- return displayName.contains (searchPatternDelBlank) || nameCopy.contains (searchPatternDelBlank) || transliterated.contains (searchPatternDelBlank) || jianpin.contains (searchPatternDelBlank);
37+ // Get first letters of each word in displayName
38+ QStringList words = displayName.split (" " , Qt::SkipEmptyParts);
39+ QString nameFirstLetters;
40+ for (const QString &word : words) {
41+ if (!word.isEmpty ()) {
42+ QChar firstChar = word[0 ];
43+ if (firstChar.isLetter ()) {
44+ nameFirstLetters += firstChar.toLower ();
45+ }
46+ }
47+ }
48+
49+ // Check if search pattern starts with numbers
50+ QRegularExpression numberRegex (" \\ d+" );
51+ QRegularExpressionMatchIterator matches = numberRegex.globalMatch (displayName);
52+ bool hasNumberMatch = false ;
53+ while (matches.hasNext ()) {
54+ QRegularExpressionMatch match = matches.next ();
55+ QString numberInDisplayName = match.captured (0 );
56+ hasNumberMatch = true ;
57+ if (numberInDisplayName.startsWith (searchPatternDelBlank)) {
58+ return true ;
59+ }
60+ }
61+ // If there are numbers but none match the pattern
62+ if (hasNumberMatch) {
63+ return false ;
64+ }
65+
66+ // Check if displayName contains only English letters
67+ QRegularExpression englishOnly (" ^[a-z\\ s]+$" );
68+ bool isPureEnglish = englishOnly.match (displayName).hasMatch ();
69+ if (isPureEnglish) {
70+ return displayName.startsWith (searchPatternDelBlank) ||
71+ nameCopy.startsWith (searchPatternDelBlank) ||
72+ transliterated.startsWith (searchPatternDelBlank) ||
73+ jianpin.startsWith (searchPatternDelBlank) ||
74+ nameFirstLetters.startsWith (searchPatternDelBlank);
75+ }
76+
77+ return displayName.contains (searchPatternDelBlank) ||
78+ nameCopy.contains (searchPatternDelBlank) ||
79+ transliterated.contains (searchPatternDelBlank) ||
80+ jianpin.contains (searchPatternDelBlank) ||
81+ nameFirstLetters.contains (searchPatternDelBlank);
3882}
0 commit comments