Разрешить только половину ширины катакана (японский) символов в текстовом поле
В моем приложении Rails у меня есть текстовое поле, как это
<%= f.text_field :guaranter_furigana_name, autocomplete: "off", class: "form-control", placeholder: "例:ヤマダ タロウ(全角カナ)", maxlength: "50", :disabled => @disabled_field %>
Я использую jQuery для проверки этого текстового поля, принимает только символы катаканы половинной ширины (значения Unicode от ff60 до ff9f). Это то что я пробовал
// Allow only half width kana for guranter フリガナ
$(function (){
$("#t_user_name_register_guaranter_furigana_name").on("input", function(e){
var key = e.keyCode || e.charCode;
var inp = String.fromCharCode(key);
var kanaregexp = new RegExp('[\uff00-\uff9f]');
if (kanaregexp.test(inp) != true){
if( key != 8 && key != 46 && key != 32){
inp = $(this).val();
$(this).val(inp.slice(0,-1));
$("#telno_errmsg").html("半角カナ字のみを入力してください。").show().fadeOut(3000);
return false;
}
}
});
});
Код беспорядок и не всегда работает. Пожалуйста помоги
2 ответа
Для людей, которые ищут разные правила проверки jQuery при работе с японским текстом.
// Хирагана и Катакана
jQuery.validator.addMethod("kana", function(value, element) {
return this.optional(element) || /^([ァ-ヶーぁ-ん]+)$/.test(value);
}, "<br/>全角ひらがな・カタカナを入力してください"
);
// Только Хирагана
jQuery.validator.addMethod("hiragana", function(value, element) {
return this.optional(element) || /^([ぁ-ん]+)$/.test(value);
}, "<br/>全角ひらがなを入力してください"
);
// Только катакана
jQuery.validator.addMethod("katakana", function(value, element) {
return this.optional(element) || /^([ァ-ヶー]+)$/.test(value);
}, "<br/>全角カタカナを入力してください"
);
// Полусимвольная кана
jQuery.validator.addMethod("hankana", function(value, element) {
return this.optional(element) || /^([ァ-ン゙゚]+)$/.test(value);
}, "<br/>半角カタカナを入力してください"
);
// только алфавиты
jQuery.validator.addMethod("alphabet", function(value, element) {
return this.optional(element) || /^([a-zA-z\s]+)$/.test(value);
}, "<br/>半角英字を入力してください"
);
Для больше, проверьте здесь
По JS:
Проверьте только катаканы:
function checkKataKana (input_val, event) {
var code = 0;
var each_val = input_val.split('');
$.each(each_val, function (key, value) {
code = value.charCodeAt();
if (!(12449 <= code && code <= 12538)) {
flag=1;
}
});
}
Проверьте число полуширины:
function check_Half_width_Number (input_val, event) {
var code = 0;
var each_val = input_val.split('');
$.each(each_val, function (key, value) {
code =value.charCodeAt();
if ((12352<= code && code <= 12447) ||
(12448<= code && code <= 12543) ||
(19968<= code && code <= 19893)) {
flag=1;
}
});
}