用于 Javascript 的 RegEx 仅允许字母数字

IT技术 javascript regex
2021-01-15 16:57:40

我需要找到一个只允许字母数字的正则表达式。到目前为止,我尝试的每个人都只在字符串是字母数字时才有效,意思是包含一个字母和一个数字。我只想要一个允许两者之一而不需要两者。

6个回答
/^[a-z0-9]+$/i

^         Start of string
[a-z0-9]  a or b or c or ... z or 0 or 1 or ... 9
+         one or more times (change to * to allow empty string)
$         end of string    
/i        case-insensitive

更新(支持通用字符)

如果您需要此正则表达式支持通用字符,您可以在此处找到unicode 字符列表。

例如: /^([a-zA-Z0-9\u0600-\u06FF\u0660-\u0669\u06F0-\u06F9 _.-]+)$/

这将支持波斯语。

哇——我想我从来没有彻底理解正则表达式,直到它以这种简单的方式分解。谢谢!
2021-03-12 16:57:40
@Greg,我喜欢你解释与正则表达式相关的答案的方式。在我看来,没有解释的正则表达式是没有用的。因为你得到了一次性的“是的,它有效”,突然间,当你需要改变它时,你会立即返回一个不同的用例,而不是实际学习正则表达式的作用另外,您比正则表达式文档更容易理解:P
2021-03-13 16:57:40
[az] 不匹配国际字符。
2021-03-20 16:57:40
问题 - 没有 /g,您最终只会在换行之前替换匹配项。
2021-03-21 16:57:40
另一种方式是[^\W_][a-z0-9]/i 是一种明显的方式。
2021-03-31 16:57:40

如果您想返回替换的结果,那么这将起作用:

var a = 'Test123*** TEST';
var b = a.replace(/[^a-z0-9]/gi,'');
console.log(b);

这将返回:

Test123TEST

请注意,gi 是必需的,因为它意味着全局(不仅仅是在第一场比赛中),并且不区分大小写,这就是为什么我使用 az 而不是 a-zA-Z。括号内的 ^ 表示“不在这些括号内的任何内容”。

警告:如果这正是您想要的,字母数字非常好。但是如果你在国际市场上使用它,比如一个人的名字或地理区域,那么你需要考虑 unicode 字符,这不会这样做。例如,如果你有一个像“Âlvarö”这样的名字,它就会变成“lvar”。

这是一个很好的答案和解释。如果需要,请记住留出空间。.replace(/[^a-z0-9\]/gi,'')
2021-03-15 16:57:40

使用单词字符类。以下等效于 a ^[a-zA-Z0-9_]+$

^\w+$

解释:

  • ^ 字符串开头
  • \w 任何单词字符(AZ、az、0-9、_)。
  • $ 字符串结尾

使用/[^\w]|_/g,如果你不想匹配下划线。

没错,不是对所发布的 Q 的严格回答,而是我正在寻找的答案。
2021-03-17 16:57:40
抱歉,这与国际字符不匹配,例如 Ä
2021-03-18 16:57:40
几乎字母数字根本不是字母数字,但感谢您的回答对我帮助很大
2021-03-19 16:57:40
\w 实际上相当于 [a-zA-Z_0-9] 所以你的 RegEx 也匹配下划线 [_]。
2021-03-21 16:57:40
/^([a-zA-Z0-9 _-]+)$/

上面的正则表达式允许字符串中的空格并限制特殊字符。它只允许 az、AZ、0-9、空格、下划线和破折号。

^\s*([0-9a-zA-Z]*)\s*$

或者,如果您想要至少一个字符:

^\s*([0-9a-zA-Z]+)\s*$

方括号表示一组字符。^ 是输入的开始。$ 是输入的结尾(或换行符,取决于您的选项)。\s 是空格。

前后的空格是可选的。

括号是分组运算符,允许您提取所需的信息。

编辑:删除了我对 \w 字符集的错误使用。