1 Востаннє редагувалося Lujok (26.10.2015 11:15:09)

Тема: Зробити так щоб вводити лише англійські символи для назв колонок.

Імена колонок в таблицях SQLite  можуть бути лише на  анлійській мові .  Чи  можно і як  перевіряти на анлійській мові чи на іншій  користувач вводе назву колонок ?

2

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

Перевіряти кожен символ на те, чи входить він в діапазон 65 - 122 приведенням до int. Але майте на увазі, що це лише 26 літер англійського алфавіту. Без пунктуації і літер з діакритикою.

Подякували: koala, Lujok2

3

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

quez написав:

Перевіряти кожен символ на те, чи входить він в діапазон 65 - 122 приведенням до int. Але майте на увазі, що це лише 26 літер англійського алфавіту. Без пунктуації і літер з діакритикою.

А методів спеціально для цоього не існує ?

4

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

Lujok написав:
quez написав:

Перевіряти кожен символ на те, чи входить він в діапазон 65 - 122 приведенням до int. Але майте на увазі, що це лише 26 літер англійського алфавіту. Без пунктуації і літер з діакритикою.

А методів спеціально для цоього не існує ?

Десь точно існують. А якщо ні, то ви напишете і він існуватиме :)

Єдине що можна сказати, що в стандартній бібліотеці такого немає, тому що англійська мова нічим не краща за інші.

5

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

Вам, схоже, Character.UnicodeBlock потрібен.
https://docs.oracle.com/javase/8/docs/a … Block.html

Подякували: fed_lviv, Lujok2

6 Востаннє редагувалося fed_lviv (27.10.2015 16:23:43)

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

Якщо, Вам потрібно в GUI компоненті фільтрувати ввід користувача, можна скористатися: javax.swing.text.Document

7

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

Вибачаюсь, javax.swing.text.DocumentFilter

8

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

І до чого воно тут?

9

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

quez написав:

І до чого воно тут?

Що саме?

10

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

DocumentFilter

11 Востаннє редагувалося fed_lviv (27.10.2015 20:27:56)

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

З попередніх тем пана 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 присобачуємо фільтр і маємо, щастя, в дане текстове поле прописується тільки латиниця. Тому, я не розумію Вашого повідомлення:"І до чого воно тут?"!

Подякували: Lujok1

12

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

То правильна відповідь "за допомогою регулярки", а не DocumentFIlter.

13 Востаннє редагувалося fed_lviv (27.10.2015 21:17:33)

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

Так я не сперечаюсь, за правильну відповідь, я пропоную, як з моэъ точки зору правильно зробити. P.S. регулярку ще треба приклеъти до графічного компонента.

14

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

quez написав:

То правильна відповідь "за допомогою регулярки", а не DocumentFIlter.

Я можу помилятися бо ще туман в голові  , але Ваша відповідь схожа на ту якби людині на вулиці на питання :"як проїхати "туди то"  "  відповіли  :" за допомогою транспорту  "...
fed_lviv дає практичні поради , які мені вже допомогли за місяць узнати більше ніж  майже за рік до цього . За що я йому дуже вдячний !

15 Востаннє редагувалося Lujok (28.10.2015 10:30:12)

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

fed_lviv написав:

Для цього в бібліотеці swing є чудовий клас javax.swing.text.DocumentFilter, який "непропускає" не потрібні значення(символи) в JTextField.

Це працює тільки з JTextField ?    Бо я зараз користуюсь  JOptionPane.showInputDialog(strInput); Це коли треба додати нову колонку , користувач повинен ввести для неї ім'я .   
Я то думаю пізніше використовувати додатковий JFrame (замість JOptionPane) і там може бути JTextField .  Але це пізніше , бо нехочу зараз ускладнювати .

16

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

Все модели документов, применяемые различными текстовыми компонентами
Swing, унаследованы от базового класса AbstractDocument, реализующего механизм обновления текста, безопасный с точки зрения работы нескольких потоков

Иван Портянкин - Swing эффектные пользовательские интерфейсы

JTextField field = new JTextField();
((AbstractDocument) field.getDocument()).setDocumentFilter(new MyFilter());

Де MyFilter, Ваш клас, який наслідується від класа javax.swing.text.DocumentFilter

Подякували: Lujok1

17 Востаннє редагувалося Lujok (02.11.2015 20:38:46)

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

quez написав:

Перевіряти кожен символ на те, чи входить він в діапазон 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]

18 Востаннє редагувалося Lujok (02.11.2015 20:43:22)

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

fed_lviv написав:

... Для цього в бібліотеці swing є чудовий клас javax.swing.text.DocumentFilter, який "непропускає" не потрібні значення(символи) в JTextField. Тобто пишеться клас, який наслідує клас javax.swing.text.DocumentFilter, в конструкторі даного класа задаєм регулярний вираз (тільки латиниця). Переписуємо метод  replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs). Компоненту JTextField присобачуємо фільтр і маємо, щастя, в дане текстове поле прописується тільки латиниця.

Намагався зробити як Ви пропонуєте але поки що не виходить.
Як задати 

регулярний вираз (тільки латиниця)

?

19 Востаннє редагувалося fed_lviv (03.11.2015 09:00:46)

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

Створюэте клас, який наслідуэться від класу   javax.swing.text.DocumentFilter. створюэте конструктор класа в якому задаэться тип String, який надалі будете застосовувати, як регулярний вираз, дозволених символів "^[a-zA-Z ]"  Перевизначаэте метод  replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs). В ньому проводити заміну всіх непотрібних символів у введеному тексті, наприклад методом replaceAll

20

Re: Зробити так щоб вводити лише англійські символи для назв колонок.

"[^a-zA-Z]"