用于匹配日文字符和字母的正则表达式

3

我想添加一个验证规则来验证文本,它应该符合以下任一规则:

  • 日语字符(任何日语字母) => 北海道

  • 字母表(A-Z) => Kantname

  • 带有字母表的日语字符 => 北海道AB

我编写了以下正则表达式,但它未按预期工作

/^[a-zA-Z]+$|[\u3000-\u303F]|[\u3040-\u309F]|[\u30A0-\u30FF]|[\uFF00-\uFFEF]|[\u4E00-\u9FAF]|[\u2605-\u2606]|[\u2190-\u2195]|\u203B/g;

如果我尝试以下代码,它会返回TRUE
console.log(pattern.test('北海道 <script>'));

尝试使用/^[一-龯a-zA-Z]+$/ - Wiktor Stribiżew
1个回答

2
您正在错误地使用锚点:需要将所有字符类合并为一个单一的类,并将锚点应用于此超类:
/^[a-zA-Z\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFFEF\u4E00-\u9FAF\u2605-\u2606\u2190-\u2195\u203B]+$/

查看正则表达式演示

var re = /^[a-zA-Z\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFFEF\u4E00-\u9FAF\u2605-\u2606\u2190-\u2195\u203B]+$/;
var strs = ['北海道AB', 'Kantname', '北海道', '北海道 <script>'];

for (var s of strs) {
  if (re.test(s)) {
    console.log(s, " matches the regex");
  } else {
    console.log(s, " does NOT match the regex");
  }
}


1
是的,添加一些特殊字符很完美,就像我用 @#.. 添加的一样。谢谢这个。 - AnNaMaLaI
1
你不应该转义 @#。如果你想将它们添加到字符类中,应该像这样添加:[@#....] - Wiktor Stribiżew

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