Javascript正则表达式字母数字英语和日语

时间:2017-04-27 11:53:39

标签: javascript regex alphanumeric

我正在尝试制作一个正则表达式,只允许字符A-Z +整数0 - 9与短划线 - 并且下划线_还有日语字符。

$.validator.addMethod("alphaDash", function(value, element) {
        return this.optional(element) || /^[a-zA-Z0-9-_]+$/i.test(value);
      }, "Username must contain only letters, numbers, dashes or underscores.");

上面的正则表达式 / ^ [a-zA-Z0-9 -_] + $ / 仅适用于英文字符,如何让它接受日语字符?平假名/片假名/汉字

3 个答案:

答案 0 :(得分:2)

度Acc。到XRegExp Unicode scripts

  • 平假名(\p{Hiragana})char正则表达式:[\u3041-\u3096\u309D-\u309F]|\uD82C\uDC01|\uD83C\uDE00
  • 片假名(\p{Katakana})char正则表达式:[\u30A1-\u30FA\u30FD-\u30FF\u31F0-\u31FF\u32D0-\u32FE\u3300-\u3357\uFF66-\uFF6F\uFF71-\uFF9D]|\uD82C\uDC00
  • 汉字(\p{Han}):[\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FD5\uF900-\uFA6D\uFA70-\uFAD9]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]

您可以使用XRegExp(这是更好的,因为库不断更新):



var rx = new XRegExp("^[-\\w\\p{Hiragana}\\p{Katakana}\\p{Han}]+$");
console.log(XRegExp.test("werえ", rx));
console.log(XRegExp.test("werえ3", rx));

<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.2.0/xregexp-all.min.js"></script>
&#13;
&#13;
&#13;

或者你可以使用这些范围构建一个你以后必须支持的正则表达式:

&#13;
&#13;
var pHiragana = "[\\u3041-\\u3096\\u309D-\\u309F]|\\uD82C\\uDC01|\\uD83C\\uDE00";
var pKatakana = "[\\u30A1-\\u30FA\\u30FD-\\u30FF\\u31F0-\\u31FF\\u32D0-\\u32FE\\u3300-\\u3357\\uFF66-\\uFF6F\\uFF71-\\uFF9D]|\\uD82C\\uDC00";
var pHan = "[\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u3005\\u3007\\u3021-\\u3029\\u3038-\\u303B\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uF900-\\uFA6D\\uFA70-\\uFAD9]|[\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]";
var rx = new RegExp("^([\\w-]|" + pHiragana + "|" + pKatakana + "|" + pHan + ")+$");
console.log(rx.test("werえ"));
console.log(rx.test("werえ3"));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用以下内容:

/^[぀-ゟ゠-ヿ一-龯\w]+$/gu

答案 2 :(得分:0)

这是一个匹配平假名(unicode 3040-309F)的示例正则表达式: /[a-zA-Z0-9_\u3040-\u309F]+/ http://regexr.com/3frf9

您可以更改此选项以添加其他方言/语言。您可能需要查看this answer以查看其他一些unicode值,或者只是在其他地方在线查找。