diff --git a/src/regexp.c b/src/regexp.c
index 733d564..558e6ef 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -2543,12 +2543,20 @@ collection:
 				break;
 			    case CLASS_ALNUM:
 				for (cu = 1; cu <= 255; cu++)
-				    if (isalnum(cu))
+				    if (isalnum(cu)
+#if defined(__APPLE__) && __APPLE__ == 1
+					    && isascii(cu)
+#endif
+				       )
 					regmbc(cu);
 				break;
 			    case CLASS_ALPHA:
 				for (cu = 1; cu <= 255; cu++)
-				    if (isalpha(cu))
+				    if (isalpha(cu)
+#if defined(__APPLE__) && __APPLE__ == 1
+					    && isascii(cu)
+#endif
+				       )
 					regmbc(cu);
 				break;
 			    case CLASS_BLANK:
@@ -2572,7 +2580,14 @@ collection:
 				break;
 			    case CLASS_LOWER:
 				for (cu = 1; cu <= 255; cu++)
-				    if (MB_ISLOWER(cu))
+				    if (MB_ISLOWER(cu)
+#if defined(__APPLE__) && __APPLE__ == 1
+					    /* Exclude FEMININE and MUSCULINE
+					     * ORDINAL INDICATORs (U+00AA and
+					     * U+00BA) */
+					    && cu != 170 && cu != 186
+#endif
+				       )
 					regmbc(cu);
 				break;
 			    case CLASS_PRINT:
@@ -2582,7 +2597,11 @@ collection:
 				break;
 			    case CLASS_PUNCT:
 				for (cu = 1; cu <= 255; cu++)
-				    if (ispunct(cu))
+				    if (ispunct(cu)
+#if defined(__APPLE__) && __APPLE__ == 1
+					    && isascii(cu)
+#endif
+				       )
 					regmbc(cu);
 				break;
 			    case CLASS_SPACE:
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index 5e073ee..a088dc6 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -4837,10 +4837,19 @@ check_char_class(int class, int c)
     switch (class)
     {
 	case NFA_CLASS_ALNUM:
-	    if (c >= 1 && c <= 255 && isalnum(c))
+	    if (c >= 1 && c <= 255 && isalnum(c)
+#if defined(__APPLE__) && __APPLE__ == 1
+		    && isascii(c)
+#endif
+	       )
 		return OK;
 	    break;
 	case NFA_CLASS_ALPHA:
+	    if (c >= 1 && c <= 255 && isalpha(c)
+#if defined(__APPLE__) && __APPLE__ == 1
+		    && isascii(c)
+#endif
+	       )
 	    if (c >= 1 && c <= 255 && isalpha(c))
 		return OK;
 	    break;
@@ -4861,7 +4870,13 @@ check_char_class(int class, int c)
 		return OK;
 	    break;
 	case NFA_CLASS_LOWER:
-	    if (MB_ISLOWER(c))
+	    if (MB_ISLOWER(c)
+#if defined(__APPLE__) && __APPLE__ == 1
+		    /* Exclude FEMININE and MUSCULINE ORDINAL INDICATORs
+		     * (U+00AA and U+00BA) */
+		    && c != 170 && c != 186
+#endif
+	       )
 		return OK;
 	    break;
 	case NFA_CLASS_PRINT:
@@ -4869,7 +4884,11 @@ check_char_class(int class, int c)
 		return OK;
 	    break;
 	case NFA_CLASS_PUNCT:
-	    if (c >= 1 && c <= 255 && ispunct(c))
+	    if (c >= 1 && c <= 255 && ispunct(c)
+#if defined(__APPLE__) && __APPLE__ == 1
+		    && isascii(c)
+#endif
+	       )
 		return OK;
 	    break;
 	case NFA_CLASS_SPACE:
