允许字母数字、-、_ 和空格的正则表达式

Posted

技术标签:

【中文标题】允许字母数字、-、_ 和空格的正则表达式【英文标题】:Regex for allowing alphanumeric,-,_ and space 【发布时间】:2012-10-28 07:41:45 【问题描述】:

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

谁能帮我解决这个问题?

提前致谢。

【问题讨论】:

试试/[a-z\d\-_\s]+/i。但您可能想学习 正则表达式。您无法在网络上找到所有这些内容,尤其是在不常见的情况下。 是的,我很不擅长 @elclanrs 不适合我 是的,忘记了开始和结束字符:/^[a-z\d\-_\s]+$/i。这就是为什么知道正则表达式很有用......我在这里学到了regular-expressions.info @elclanrs 是的,它正在工作,请将您的解决方案发布为答案,以便我可以将其标记为已接受 【参考方案1】:

Character sets 将在这里提供大量帮助。您想为要验证的字符创建匹配集:

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

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

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

(注意the + indicates 必须有至少一个字符才能匹配;如果零长度字符串也可以,请改用*

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

奖励积分:此正则表达式匹配非 ASCII 字母。不幸的是,大多数浏览器中的正则表达式引擎不支持命名字符集but there are some libraries to help with that。

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

【讨论】:

这比我的回答要好,因为[a-z[0-9]_]/i\w 相同 当我们提供空间作为第一个字符时,这不起作用【参考方案2】:

试试这个正则表达式:

/^[a-z\d\-_\s]+$/i

【讨论】:

@rahul:这可行,但请检查 Nevir 的答案,因为它也应该可行,而且时间短一些。基本上\w 表示alpha + 下划线,它只是一个快捷方式,如\d 表示[0-9] 试试这个正则表达式 /^[\w]+([-_\s]1[a-z0-9]+)*$/i 这将只允许单个空格或 - 或 _ 文本 Ex: atoz-some word_1234【参考方案3】:
/^[-\w\s]+$/

\w 匹配字母数字下划线

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

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

【讨论】:

【参考方案4】:
var string = 'test- _ 0Test';
string.match(/^[-_ a-zA-Z0-9]+$/)

【讨论】:

【参考方案5】:
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 等其他人不适用于我。

【讨论】:

这允许基本的特殊字符需要“”,?,:, .... 并阻止其他字符。谢谢【参考方案6】:

试试这个正则表达式

*更新正则表达式

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

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

Ex: this-some abc123_regex

学习:https://regexr.com

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

【讨论】:

为什么要匹配单个空格连字符或下划线?这不是它被要求的。还有你的正则表达式matches _______ 我有理由这样做。假设有一个带有@elclanrs 正则表达式的用户名字段(第一个答案)。在这种情况下,实时用户只需在他的用户名字段中输入---_ _ _ this,验证就会通过,这是完全错误的。所以为了避免我给了像这样的正则表达式。 但是您的正则表达式匹配 ____ 这是错误的,请参阅我之前评论中提供的链接。 它总是匹配_____ (末尾有一个空格)。 现在不允许使用除“连字符”和“下划线”以外的特殊字符【参考方案7】:

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

    ABC123 ABC 123 ABC123(空格) ABC 123(空格)

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

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

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

【讨论】:

【参考方案8】:

以下两者都对我有用。

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

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

inputString.replace(/[^a-zA-Z0-9\-_\s]/g,"");

【讨论】:

以上是关于允许字母数字、-、_ 和空格的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

允许字母、数字、小数、空格和下划线的正则表达式模式

JS 正则 允许半角英数字、- (减号)、_ (下划线) 允许全角文字 英数字、记号(空格除外)

用于文本框验证的 HTML5 正则表达式模式:仅允许字母、空格和某些字符

java正则表达式 过滤特殊字符 只允许中文、字母和数字, 该怎么写?急。。。

将字母和数字匹配在一起或仅匹配字母的正则表达式

验证全名的 Java 正则表达式只允许空格和字母