JavaScript 正则表达式:字母数字英文和日文

4

我正在尝试制作一个正则表达式,只允许使用大写字母 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-_]+$/仅适用于英文字符,如何使其接受日语字符?平假名/片假名/汉字

请查看检查字符串是否包含日语/中文字符 - Wiktor Stribiżew
@WiktorStribiżew 噢,是Unix代码,那应该可以工作! - Kiow
@WiktorStribiżew werえ 会失败,而 werえ3 会通过。 - Kiow
是的,但 [a-zA-Z0-9_] = \w。另外,您不需要匹配汉字吗?您只包括平假名和片假名。 - Wiktor Stribiżew
显示剩余9条评论
2个回答

3

根据XRegExp Unicode scripts

  • 平假名(\p{Hiragana})字符正则表达式: [\u3041-\u3096\u309D-\u309F]|\uD82C\uDC01|\uD83C\uDE00
  • 片假名(\p{Katakana})字符正则表达式: [\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>

或者,您可以使用这些范围构建一个正则表达式,以后需要对其进行支持:

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"));


0
这是一个匹配平假名(Unicode 3040-309F)的正则表达式示例: /[a-zA-Z0-9_\u3040-\u309F]+/ http://regexr.com/3frf9 您可以修改它以添加其他方言/语言。 您可能想查看this answer以查看其他Unicode值,或在其他地方在线查找它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接