@@ -34,5 +34,43 @@ 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+ QRegularExpressionMatch match = numberRegex.match (displayName);
52+ if (match.hasMatch ()) {
53+ QString numberInDisplayName = match.captured (0 );
54+ if (numberInDisplayName.startsWith (searchPatternDelBlank)) {
55+ return true ;
56+ }
57+ return false ;
58+ }
59+
60+ // Check if displayName contains only English letters
61+ QRegularExpression englishOnly (" ^[a-z\\ s]+$" );
62+ bool isPureEnglish = englishOnly.match (displayName).hasMatch ();
63+ if (isPureEnglish) {
64+ return displayName.startsWith (searchPatternDelBlank) ||
65+ nameCopy.startsWith (searchPatternDelBlank) ||
66+ transliterated.startsWith (searchPatternDelBlank) ||
67+ jianpin.startsWith (searchPatternDelBlank) ||
68+ nameFirstLetters.startsWith (searchPatternDelBlank);
69+ }
70+
71+ return displayName.contains (searchPatternDelBlank) ||
72+ nameCopy.contains (searchPatternDelBlank) ||
73+ transliterated.contains (searchPatternDelBlank) ||
74+ jianpin.contains (searchPatternDelBlank) ||
75+ nameFirstLetters.contains (searchPatternDelBlank);
3876}
0 commit comments