51

我正在寻找一个允许在 JavaScript/jQuery 中使用字母数字字符、-、_ 或空格的正则表达式。我尝试谷歌搜索,但无法找到。

谁能帮我解决这个问题?

提前致谢。

4

9 回答 9

90

字符集将在这里大有帮助。您要为要验证的字符创建匹配集:

  • 您可以将字母数字与 a 匹配,这与JavaScript\w中的相同(其他语言可能不同)。[A-Za-z0-9_]
  • 留下-和空格,可以组合成一个匹配的集合,例如[\w\- ]. 但是,您可能需要考虑使用\s而不是仅使用空格字符(\s也匹配制表符和其他形式的空格)
    • 请注意,我正在转义-\-以便正则表达式引擎不会将其与字符范围混淆,例如A-Z
  • 最后,您可能希望通过锚定开始和结束^来确保整个字符串匹配$

您可能正在寻找的完整正则表达式是:

/^[\w\-\s]+$/

(注意表示+必须至少有一个字符才能匹配;*如果零长度字符串也可以,请使用 a 代替)

最后,http://www.regular-expressions.info/是一个很棒的参考


奖励积分: 此正则表达式匹配非 ASCII 字母。不幸的是,大多数浏览器中的正则表达式引擎不支持命名字符集,但有一些库可以帮助解决这个问题。

对于支持命名字符集的语言/平台,您可以使用/^[\p{Letter}\d\_\-\s]+$/

于 2012-11-08T06:17:18.657 回答
68

试试这个正则表达式:

/^[a-z\d\-_\s]+$/i
于 2012-11-08T06:25:45.307 回答
11
/^[-\w\s]+$/

\w匹配字母数字下划线

\s匹配空格制表符换行符

- 匹配连字符(如果您的字符集示例中有连字符 [az],请确保将连字符放在开头,像这样 [-az])

于 2012-11-08T06:25:52.823 回答
9
var string = 'test- _ 0Test';
string.match(/^[-_ a-zA-Z0-9]+$/)
于 2012-11-08T06:15:10.833 回答
4
var regex = new RegExp("^[A-Za-z0-9? ,_-]+$");
            var key = String.fromCharCode(event.charCode ? event.which : event.charCode);
            if (!regex.test(key)) {
                event.preventDefault();
                return false;
            }

在正则表达式[A-Za-z0-9?spaceHere,_-]中,问号“?”后有一个文字空格。这匹配空间。其他人喜欢/^[-\w\s]+$/并且/^[a-z\d\-_\s]+$/i不为我工作。

于 2016-03-22T15:57:05.033 回答
4

试试这个正则表达式

*更新的正则表达式

/^[a-z0-9]+([-_\s]{1}[a-z0-9]+)*$/i

这将只允许文本之间的单个空格或 - 或 _

Ex: this-some abc123_regex

学习:https ://regexr.com

*注意:我已经根据 Toto 问题更新了正则表达式

于 2019-07-05T13:20:41.807 回答
0

对我来说,我想要一个支持前面字符串的正则表达式。基本上,动机是支持一些外国邮政格式,因为它应该是允许空格的字母数字。

  1. ABC123
  2. ABC 123
  3. ABC123(空间)
  4. ABC 123(空间)

所以我最终编写了如下的自定义正则表达式。

/^([a-z]+[\s]*[0-9]+[\s]*)+$/i

在此处输入图像描述

在这里,我输入了 *,[\s]*因为它不是必须有空格的。在我的情况下,邮政编码可能包含也可能不包含空格。

于 2018-02-13T08:37:33.817 回答
0

以下两者都对我有用。

/[^a-zA-Z0-9\-_\s]/g
/[^a-z\d\-_\s]+$/i

可以像这样用空替换除字母数字、-、_ 以外的其他字符。

inputString.replace(/[^a-zA-Z0-9\-_\s]/g,"");
于 2021-07-09T10:24:27.263 回答
0

试试这个允许字母数字和空格

[a-zA-Z0-9]

于 2022-01-18T09:55:54.123 回答