如何在JavaScript中检查Unicode输入值?

时间:2017-08-21 18:32:55

标签: javascript jquery

我想允许用户只输入高棉字符(Unicode字符),否则会发出警告。

Khmer Name: <input type="text" class="namekh" name="namekh">

为此,我的示例脚本如下:

<script>
  var namekh = $('.namekh').val();

  // function to check unicode or not
  if (isUnicodeFunc(namekh) == true) {
    alert('unicode character');
  } else {
    alert('please enter unicode only');
  }
</script>

如何定义函数isUnicodeFunc以检测值是否为Unicode?

4 个答案:

答案 0 :(得分:1)

According to Wikipedia,高棉字母是unicode范围0x1780到0x17FF和0x19E0到0x19FF,所以你可以简单地测试字符串中的所有字符都在这个范围内:https://jsfiddle.net/8o87jgys/1/

function isUnicodeFunc(string) {
    let isKhmer = true;
    for (let i = 0; i < string.length; i++) {
        let code = string.charCodeAt(i);
        if (code < 0x1780 || (code > 0x17FF && code < 0x19E0) || code > 0x19FF) {
            isKhmer = false;
            break;
        }
    }

    return isKhmer;
}

答案 1 :(得分:0)

您可以使用正则表达式测试输入。

var myRegex  = new RegExp('[ក-\u17fe᧠-᧾]', 'gi');;

function isKhmerChar(textInput){
    return myRegex.test(textInput);
}

有些工具可以从中获取正常表达式,例如Unicode range RegExp generator,这个工具适用于javascript unicode字符。

RegExp MDN

RegExp.prototype.test() MDN

答案 2 :(得分:0)

您可以使用RegEx获得简单的解决方案。请参阅第一个函数,该函数将测试给定字符串是否仅包含高棉字符。 Here is an explanation, what is matched with the following RegEx rule.

function checkKhmerCharacters( val ) {
  // Khmer range found at https://en.wikipedia.org/wiki/Khmer_alphabet
  return /^[\u1780-\u17FF\u19E0-\u19FF]$/.test( val );
}

// Validate as you type
$( 'input' ).on( 'input', function ( e ) {
  const elm = $( this );
  const isValid = checkKhmerCharacters( e.target.value );
  elm.toggleClass( 'input-error', !isValid );
} );

$( 'button' ).on( 'click', () => {
  var namekh = $('.namekh').val();
  console.log( checkKhmerCharacters( namekh ) );

  if( checkKhmerCharacters( namekh ) ) {
    alert( 'unicode character' );
  }
  else {
    alert( 'please enter unicode only' );
  }
} );
.input-error {
  border: red 3px solid;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Khmer Name: <input type="text" class="namekh" name="namekh"> <button>Check</button>

答案 3 :(得分:0)

根据unicode table,你必须检查一个字符串是否有一个charackter,其中charcode位于0x17800x17FF0x19e00x19FF之间。<登记/> 您可以split字符串来接收数组。您可以使用some循环此数组。如果条件返回false,some()将打破循环 - 因此您不必遍历整个数组

代码

function containsOnlyKahmerCharakter(str) {
  return str.split('').some(function(char) {
    var charCode = char.charCodeAt('0')
    return (
      charCode >= 0x1780 && charCode <= 0x17FF 
      || charCode >= 0x19e0 && charCode <= 0x19FF
    )
  })
}

实施例

&#13;
&#13;
function containsOnlyKahmerCharakter(str) {
  return str.split('').some(function(char) {
    var charCode = char.charCodeAt('0')
    return (
      charCode >= 0x1780 && charCode <= 0x17FF 
      || charCode >= 0x19e0 && charCode <= 0x19FF
    )
  })
}

console.log(containsOnlyKahmerCharakter('ក ខ គ ឃ ង ច'))
&#13;
&#13;
&#13;