Вы включаете тег "локализация" в свой вопрос.В случае написания международной заявки вы должны четко определить, что вы подразумеваете под буквенными или числовыми символами .Если вы пишете программы для Windows, я рекомендую вам использовать функцию GetStringTypeEx
(см. http://msdn.microsoft.com/en-us/library/dd318118.aspx). Например, код
BOOL bSuccess;
int isTrue;
WORD wCharType;
bSuccess = GetStringTypeExW (LOCALE_USER_DEFAULT, CT_CTYPE1, L"a", 1, &wCharType);
if (wCharType & C1_ALPHA == C1_ALPHA) {
//
}
. Вы также можете использовать CT_CTYPE3
или CT_CTYPE2
дляопределите, является ли символ идеографическим или европейским числом.
Точнее, попробуйте использовать функции iswalpha
, IsCharAlphaW
, iswalnum
, iswdigit
и GetStringTypeExW
дляпроверить следующие символы: L'a ', L'ü', L'á ', L'я' (русский символ), L 'ノ' (японский символ в катакана), L '一' (1 на японском). Выувидим, что
- iswalpha (L 'ノ') возвращает альфа
- IsCharAlphaW (L 'ノ') возвращает НЕ альфа
- iswalnum (L '一')возврат букв или цифр
- iswdigit (L '一') возврат НЕ цифр
код
bSuccess = GetStringTypeExW (LOCALE_USER_DEFAULT, CT_CTYPE2, L"一", 1, &wCharType);
if ((wCharType & C2_EUROPENUMBER) == wCharType) {
// numeric
}
говорит вам, что L "一" НЕ являетсяевропейский номер. Вы можете использовать GetStringTypeExW
для удаления европейского номера, например, от арабского номера и т. д.
Поэтому я рекомендую вам более точно указать ваше требование, а затем выбрать API на основетребования.В целом, использование C API - не лучший способ для международной заявки.