@@ -34,5 +34,54 @@ 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+ // Only check for number matches if search pattern contains numbers
50+ QRegularExpression searchNumberCheck (" \\ d+" );
51+ if (searchNumberCheck.match (searchPatternDelBlank).hasMatch ()) {
52+ QRegularExpression numberRegex (" \\ d+" );
53+ QRegularExpressionMatchIterator matches = numberRegex.globalMatch (displayName);
54+ bool hasNumberMatch = false ;
55+
56+ while (matches.hasNext ()) {
57+ QRegularExpressionMatch match = matches.next ();
58+ QString numberInDisplayName = match.captured (0 );
59+ hasNumberMatch = true ;
60+ if (numberInDisplayName.startsWith (searchPatternDelBlank)) {
61+ return true ;
62+ }
63+ }
64+
65+ // If there are numbers but none match the pattern
66+ if (hasNumberMatch) {
67+ return false ;
68+ }
69+ }
70+
71+ // Check if displayName contains only English letters
72+ QRegularExpression englishOnly (" ^[a-z\\ s]+$" );
73+ bool isPureEnglish = englishOnly.match (displayName).hasMatch ();
74+ if (isPureEnglish) {
75+ return displayName.startsWith (searchPatternDelBlank) ||
76+ nameCopy.startsWith (searchPatternDelBlank) ||
77+ transliterated.startsWith (searchPatternDelBlank) ||
78+ jianpin.startsWith (searchPatternDelBlank) ||
79+ nameFirstLetters.startsWith (searchPatternDelBlank);
80+ }
81+
82+ return displayName.contains (searchPatternDelBlank) ||
83+ nameCopy.contains (searchPatternDelBlank) ||
84+ transliterated.contains (searchPatternDelBlank) ||
85+ jianpin.contains (searchPatternDelBlank) ||
86+ nameFirstLetters.contains (searchPatternDelBlank);
3887}
0 commit comments