如何近似Java的Character.isLetterOrDigit()来识别Javascript中的非英文字母,数字?

jwl*_*jwl 6 javascript regex internationalization

在Javascript中,有没有办法(幸存国际化)确定一个字符是字母还是数字?这将正确识别Ä,ç作为字母和非英文数字(我不会将其视为示例)!

在Java中,Character类具有一些静态方法.isLetter(),. isDigit(),. isLetterOrDigit(),用于以国际上合适的方式确定char实际上是字母或数字.这比代码更好

//this is not right, but common and easy
if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')) { //it's a letter
Run Code Online (Sandbox Code Playgroud)

因为它会收取非英文字母.我认为C#具有类似的功能......

当然,在最坏的情况下,我可以将字符串发送回服务器进行检查,但这很痛苦......

当然,最后我想检查输入是否是有效名称(以字母开头,其余为字母或数字).小批量使用的可能性可能是:

var validName=function(atr) {
    var ele=document.createElement("div");
    try { ele.setAttribute(atr,"xxx"); }
    catch(e) { return false; }
    return true;
    }
Run Code Online (Sandbox Code Playgroud)

这在IE,FF和Chrome中测试相当不错......虽然可能需要进行彻底的测试来确定答案的一致性.而且,由于元素创建,不适合重载使用.

jwl*_*jwl 3

我创建了一个小型 Javascript 实用程序来提供此功能。我并不认为它是完美的,所以请让我知道你的公平性。如果人们喜欢它,我会将其作为这个问题的官方答案。

CharFunk: https: //github.com/joelarson4/CharFunk

  • CharFunk.getDirectionality(ch) - 用于查找角色的方向性
  • CharFunk.isAllLettersOrDigits(string) - 如果字符串参数由所有字母和数字组成,则返回 true
  • CharFunk.isDigit(ch) - 如果提供长度为 1 的数字字符串,则返回 true
  • CharFunk.isLetter(ch) - 如果提供长度为 1 的字母字符串,则返回 true
  • CharFunk.isLetterNumber(ch) - 如果提供的长度为 1 的字符串位于 Unicode“Nl”类别中,则返回 true
  • CharFunk.isLetterOrDigit(ch) - 如果提供长度为 1 的字母或数字字符串,则返回 true
  • CharFunk.isLowerCase(ch) - 如果提供长度为 1 的小写字符串,则返回 true
  • CharFunk.isMirrored(ch) - 如果提供的长度为 1 的字符串是镜像字符,则返回 true
  • CharFunk.isUpperCase(ch) - 如果提供长度为 1 的大写字符串,则返回 true
  • CharFunk.isValidFirstForName(ch) - 如果提供的长度为 1 的字符串是 JavaScript 标识符的有效前导字符,则返回 true
  • CharFunk.isValidMidForName(ch) - 如果提供的长度为 1 的字符串是 ECMAScript 标识符的有效非前导字符,则返回 true
  • CharFunk.isValidName(string,checkReserved) - 如果字符串是有效的 ECMAScript 标识符,则返回 true
  • CharFunk.isWhitespace(ch) - 如果提供的长度为 1 的字符串是空白字符,则返回 true
  • CharFunk.indexOf(string,callback) - 返回第一个从回调中返回 true 的匹配索引
  • CharFunk.lastIndexOf(string,callback) - 返回最后一个匹配的索引,该索引从回调中返回 true 返回值
  • CharFunk.matchesAll(string,callback) - 如果提供的字符串中的所有字符都导致回调返回 true,则返回 true
  • CharFunk.replaceMatches(string,callback,ch) - 返回替换所有匹配字符的新字符串