@@ -34,5 +34,40 @@ 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 () && word[0 ].isUpper ()) {
42+ nameFirstLetters += word[0 ].toLower ();
43+ }
44+ }
45+
46+ // Check if search pattern starts with numbers
47+ QRegularExpression numberRegex (" \\ d+" );
48+ QRegularExpressionMatch match = numberRegex.match (displayName);
49+ if (match.hasMatch ()) {
50+ QString numberInDisplayName = match.captured (0 );
51+ if (numberInDisplayName.startsWith (searchPatternDelBlank)) {
52+ return true ;
53+ }
54+ return false ;
55+ }
56+
57+ // Check if displayName contains only English letters
58+ QRegularExpression englishOnly (" ^[a-z\\ s]+$" );
59+ bool isPureEnglish = englishOnly.match (displayName).hasMatch ();
60+ if (isPureEnglish) {
61+ return displayName.startsWith (searchPatternDelBlank) ||
62+ nameCopy.startsWith (searchPatternDelBlank) ||
63+ transliterated.startsWith (searchPatternDelBlank) ||
64+ jianpin.startsWith (searchPatternDelBlank) ||
65+ nameFirstLetters.startsWith (searchPatternDelBlank);
66+ }
67+
68+ return displayName.contains (searchPatternDelBlank) ||
69+ nameCopy.contains (searchPatternDelBlank) ||
70+ transliterated.contains (searchPatternDelBlank) ||
71+ jianpin.contains (searchPatternDelBlank) ||
72+ nameFirstLetters.contains (searchPatternDelBlank);
3873}
0 commit comments