Тема: Зробити так щоб вводити лише англійські символи для назв колонок.
Імена колонок в таблицях SQLite можуть бути лише на анлійській мові . Чи можно і як перевіряти на анлійській мові чи на іншій користувач вводе назву колонок ?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Java → Зробити так щоб вводити лише англійські символи для назв колонок.
Для відправлення відповіді ви повинні увійти або зареєструватися
Імена колонок в таблицях SQLite можуть бути лише на анлійській мові . Чи можно і як перевіряти на анлійській мові чи на іншій користувач вводе назву колонок ?
Перевіряти кожен символ на те, чи входить він в діапазон 65 - 122 приведенням до int. Але майте на увазі, що це лише 26 літер англійського алфавіту. Без пунктуації і літер з діакритикою.
А методів спеціально для цоього не існує ?
quez написав:Перевіряти кожен символ на те, чи входить він в діапазон 65 - 122 приведенням до int. Але майте на увазі, що це лише 26 літер англійського алфавіту. Без пунктуації і літер з діакритикою.
А методів спеціально для цоього не існує ?
Десь точно існують. А якщо ні, то ви напишете і він існуватиме
Єдине що можна сказати, що в стандартній бібліотеці такого немає, тому що англійська мова нічим не краща за інші.
Вам, схоже, Character.UnicodeBlock потрібен.
https://docs.oracle.com/javase/8/docs/a … Block.html
Якщо, Вам потрібно в GUI компоненті фільтрувати ввід користувача, можна скористатися: javax.swing.text.Document
Вибачаюсь, javax.swing.text.DocumentFilter
І до чого воно тут?
І до чого воно тут?
Що саме?
DocumentFilter
З попередніх тем пана Lujokа видно, що робиться графічний інтерфейс для БД. При цьому використовується бібліотека SWING. Тобто, якщо я правильно зрозумів, задача стоїть така: користувач, наприклад, в JTextField, вводить назву поля (колонки) таблиці. Потрібно фільтрувати ввід, тільки латиниця. Для цього в бібліотеці swing є чудовий клас javax.swing.text.DocumentFilter, який "непропускає" не потрібні значення(символи) в JTextField. Тобто пишеться клас, який наслідує клас javax.swing.text.DocumentFilter, в конструкторі даного класа задаєм регулярний вираз (тільки латиниця). Переписуємо метод replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs). Компоненту JTextField присобачуємо фільтр і маємо, щастя, в дане текстове поле прописується тільки латиниця. Тому, я не розумію Вашого повідомлення:"І до чого воно тут?"!
То правильна відповідь "за допомогою регулярки", а не DocumentFIlter.
Так я не сперечаюсь, за правильну відповідь, я пропоную, як з моэъ точки зору правильно зробити. P.S. регулярку ще треба приклеъти до графічного компонента.
То правильна відповідь "за допомогою регулярки", а не DocumentFIlter.
Я можу помилятися бо ще туман в голові , але Ваша відповідь схожа на ту якби людині на вулиці на питання :"як проїхати "туди то" " відповіли :" за допомогою транспорту "...
fed_lviv дає практичні поради , які мені вже допомогли за місяць узнати більше ніж майже за рік до цього . За що я йому дуже вдячний !
Для цього в бібліотеці swing є чудовий клас javax.swing.text.DocumentFilter, який "непропускає" не потрібні значення(символи) в JTextField.
Це працює тільки з JTextField ? Бо я зараз користуюсь JOptionPane.showInputDialog(strInput); Це коли треба додати нову колонку , користувач повинен ввести для неї ім'я .
Я то думаю пізніше використовувати додатковий JFrame (замість JOptionPane) і там може бути JTextField . Але це пізніше , бо нехочу зараз ускладнювати .
Все модели документов, применяемые различными текстовыми компонентами
Swing, унаследованы от базового класса AbstractDocument, реализующего механизм обновления текста, безопасный с точки зрения работы нескольких потоков
Иван Портянкин - Swing эффектные пользовательские интерфейсы
JTextField field = new JTextField();
((AbstractDocument) field.getDocument()).setDocumentFilter(new MyFilter());
Де MyFilter, Ваш клас, який наслідується від класа javax.swing.text.DocumentFilter
Перевіряти кожен символ на те, чи входить він в діапазон 65 - 122 приведенням до int. Але майте на увазі, що це лише 26 літер англійського алфавіту. Без пунктуації і літер з діакритикою.
Скористався методом codePointAt(n) для того щоб узнавати код кожного введеного символа .
Думав спочатку за допомогою keyListenera недавати можливості вводити непотрібні символи, але так як keyListener реагує на кожну натиснуту клавішу то робити цього нестав . Просто наступний код вставив в метод який викликається для кнопки яка добавляє колонку в БД. І в ньому вже перевіряється чи вірно ввів користувач назву колонки .
[code=java]String sds = JOptionPane.showInputDialog(" введіть ім'я колонки");
for(int n = 0; n < sds.length(); n++)
{
int intMyChar = sds.codePointAt(n);
if ( 65 > intMyChar | intMyChar > 122 ) {
intWrongSimbol ++; // кількість символів які не входять в діапазон 65 - 122
char ch = sds.charAt(n); // charAt(n) повертає символ по індексу в sds.
if(intWrongSimbol == 1) {
bufMes.append(ch); // в bufMes зберігаються символи які не входять в діапазон 65 - 122
} else {
bufMes.append(" , ");
bufMes.append(ch);
}
}
}
................[/code]
... Для цього в бібліотеці swing є чудовий клас javax.swing.text.DocumentFilter, який "непропускає" не потрібні значення(символи) в JTextField. Тобто пишеться клас, який наслідує клас javax.swing.text.DocumentFilter, в конструкторі даного класа задаєм регулярний вираз (тільки латиниця). Переписуємо метод replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs). Компоненту JTextField присобачуємо фільтр і маємо, щастя, в дане текстове поле прописується тільки латиниця.
Намагався зробити як Ви пропонуєте але поки що не виходить.
Як задати
регулярний вираз (тільки латиниця)
?
Створюэте клас, який наслідуэться від класу javax.swing.text.DocumentFilter. створюэте конструктор класа в якому задаэться тип String, який надалі будете застосовувати, як регулярний вираз, дозволених символів "^[a-zA-Z ]" Перевизначаэте метод replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs). В ньому проводити заміну всіх непотрібних символів у введеному тексті, наприклад методом replaceAll
"[^a-zA-Z]"
Для відправлення відповіді ви повинні увійти або зареєструватися