是否有正则表达式检查字符串是否只包含大写字母、小写字母、数字和下划线?
当前回答
虽然它比\w更啰嗦,但我个人很欣赏完整POSIX字符类名称的可读性(http://www.zytrax.com/tech/web/regex.htm#special),所以我会说:
^[[:alnum:]_]+$
然而,虽然上面链接的文档声明\w将“匹配0 - 9,A - Z和A - Z范围内的任何字符(相当于POSIX [:alnum:])”,我还没有发现这是真的。至少不是用grep -P。如果使用[:alnum:],则需要显式地包含下划线,但如果使用\w则不需要。下面的简短而甜蜜的句子是最好不过的:
^\w+$
除了可读性之外,使用POSIX字符类(http://www.regular-expressions.info/posixbrackets.html)意味着正则表达式可以处理非ASCII字符串,而基于范围的正则表达式不会这样做,因为它们依赖于ASCII字符的底层顺序,这可能与其他字符集不同,因此会排除一些您可能想要捕获的非ASCII字符(如字母)。
其他回答
这在大多数情况下都是可行的。
/^[\d]*[a-z_][a-z\d_]*$/gi
我的意思是,
abcd True
abcd12 True
ab12cd True
12abcd True
1234 False
解释
^……$ -匹配模式的开始和结束 [\d]* -匹配零或多个数字 [a-z_] -匹配字母或下划线 [a-z\d_]* -匹配字母、数字或下划线 /gi -全局匹配字符串,不区分大小写
这对我很有用。你可以试试:
[\\p{Alnum}_]
这里有很多冗长的内容,我非常反对,所以,我的结论是:
/^\w+$/
\w等价于[A-Za-z0-9_],这就是你想要的(除非我们在混合中引入Unicode)。
使用+量词可以匹配一个或多个字符。如果你也想接受一个空字符串,使用*代替。
对我来说,有一个问题,我想要区分alpha,数值和alpha数值,所以要确保一个字母数字字符串包含至少一个alpha和至少一个数值,我使用:
^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$
^\w*$将适用于以下组合:
1
123
1av
pRo
av1
推荐文章
- Ruby正则表达式中\A \z和^ $的区别
- 用于匹配英国邮政编码的正则表达式
- 将所有非字母数字字符替换为空字符串
- 我如何能匹配一个字符串与正则表达式在Bash?
- 使用RegExp.exec从字符串中提取所有匹配项
- 仅用Regex替换某些组
- 使用正则表达式解析HTML:为什么不呢?
- 正则表达式来匹配不是空格的单个字符
- 在JavaScript中检查字符串包含另一个子字符串的最快方法?
- Python非贪婪正则表达式
- 正则表达式可以用来匹配嵌套模式吗?
- 在bash中使用正则表达式进行搜索和替换
- 将camelCaseText转换为标题大小写文本
- 正则表达式在Javascript中获取两个字符串之间的字符串
- Regex测试字符串是否以http://或https://开头