我在JS中使用regex验证用户名。但是,它给了我另一个国家角色的错误。所以我找到了另一个国家角色的正则表达式。
if(/^[a-zA-Z0-9äöüÄÖÜß\u4E00-\u9FAF\u3040-\u3096\u30A1-\u30FA\uFF66-\uFF9D\u31F0-\u31FF\x30A0-\x30FFñáéíóúü\p{Han}\u1100-\u11FF|\u3130-\u318F|\uA960-\uA97F|\uAC00-\uD7AF|\uD7B0-\uD7FFàâäèéêëîïôœùûüÿçÀÂÄÈÉÊËÎÏÔŒÙÛÜŸÇ\u00C0-\u017F\u4E00-\u9FFF|\u2FF0-\u2FFF|\u31C0-\u31EF|\u3200-\u9FBF|\uF900-\uFAFFzàèéìòóù\u00E0\u00E8\u00E9\u00EC\u00F2\u00F3\u00F9._-]{1,160}$/i.test(text)){
console.log('correct word');
} else {
console.log('wrong word');
}
但我只想允许一些特定的国家,例如
Korean: Hangul, Chosŏn'gŭl
Japanese: Hiragana, katakana (full width), kanji
German
Spanish
French
Italian
Chinese: Simplified Chinese
Russian
Portuguese.
我想我可以手动删除任何国家/地区角色,例如我想删除"简体中文",但我不知道我能在代码中执行什么操作因为我不知道哪个字符串用于if条件中的哪个国家/地区字符。有人可以帮忙吗?
答案 0 :(得分:0)
我不熟悉您提到的任何语言,但我可以告诉您如何为任何语言创建RegEx。
对于使用Unicode的任何语言,有一种非常简单的方法可以应用所有RegEx逻辑(可以用英语轻松应用)。
为了匹配一系列Unicode字符,如所有字母[A-Za-z],我们可以使用
[\u0041-\u005A] where \u0041 is Hex-Code for A and \u005A is Hex Code for Z
'matchCAPS leTTer'.match(/[\u0041-\u005A]+/g)
//output ["CAPS", "TT"]
'matchCAPS leTTer'.match(/[A-Z]+/g)
//output ["CAPS", "TT"]
以同样的方式,我们可以根据unicode.org提供的十六进制顺序(例如:\ u0A10到\ u0A1F)使用其他Unicode字符或等效的Hex-Code
尝试:[电 - 触]中文
如果由unicode.org按此顺序提供,它将匹配电和触之间的所有字符
同样,您可以在一个regEx中将所有其他语言的字符添加为
/[电-触ڀ-ڴᄀ-ᆿ]/ //combination of Chinese, Arabic, Korean
注意:强>
确保您使用正确范围进行字母