【问题标题】:Require both letters and numbers - regExp需要字母和数字 - 正则表达式
【发布时间】:2015-10-24 00:59:49
【问题描述】:

我试图弄清楚如何只需要字母和数字而不需要任何其他字符。因此,从字面上看,[a-z] 和(\d[0-9])取决于对数字更好的处理方式。

所以如果我有一个需要验证的字符串:

$toValidate = 'Q23AS9D0APQQ2'; // It may start with letter or number, both cases possible.

如果我有验证的话:

return /([a-z].*[0-9])|([0-9].*[a-z])/i.test($toValidate);

我在这里使用了i 标志,因为它可能是用户输入的小写或大写,这是用户偏好...所以正则表达式失败...它也接受特殊字符,所以这不是预期的效果。

通过上面的验证,这也通过了:

$toValidate = 'asdas12312...1231@asda___213-1';

然后我尝试了一些疯狂的事情,我什至不知道我做了什么,所以如果有人能在正确答案之外告诉我,我将不胜感激。

return /([a-z].*\d)+$|(\d.*[a-z])+$/i.test($toValidate);

这似乎工作得很好。但是当我尝试在特殊字符后继续输入字母或数字时,它仍然验证为true

例子:

$toValidate = 'q2IasK231@!@!#_+123';

所以请帮助我更好地理解regularExpressions,并告诉我在我的问题开头验证字符串的方法是什么。字符串中应包含字母和数字。

【问题讨论】:

  • 如果您不想允许任意字符,请停止使用.,它明确是任何字符。
  • @DaveNewton - 我明白了,现在我在 StacksOverflow 上的某个地方找到的原始正则表达式中没有解释这一点。谢谢。

标签: javascript regex


【解决方案1】:

只允许至少一个字母和至少一个数字的字母和数字使用:

/^(?=.*?\d)(?=.*?[a-zA-Z])[a-zA-Z\d]+$/

正则表达式分解:

^               # start of input
(?=.*?\d)       # lookahead to make sure at least one digit is there
(?=.*?[a-zA-Z]) # lookahead to make sure at least one letter is there
[a-zA-Z\d]+     # regex to match 1 or more of digit or letters
$               # end of input

RegEx Demo

您不应该在您的正则表达式中使用.*,否则它将允许输入中的任何字符。

【讨论】:

  • 嗯,我现在从戴夫的回答中明白了。但这也可以验证:“1111111”或“AAAAAAA”,而不要求它至少是一个数字和一个字母。
  • 哇,这更像。效果很好。也感谢您在该网站上发帖,以便我可以更好地理解您在该正则表达式中写的内容。
  • 很高兴它成功了,我在更新的演示中添加了更多解释。
  • 注意到了。非常感谢您的正确回答和解释。
  • 我认为你不需要惰性量词。
【解决方案2】:

您在伪中寻找的是: START-ANCOR [a-zA-Z0-9] 0->Inf 次 , ([a-zA-Z][0-9] OR [0-9][a-zA-Z]), [a-zA -Z0-9] 0->Inf 乘以 END-ANCOR

换句话说,以您的语言中的任何内容开头,以您的语言中的任何内容结尾,并在字母和数字之间包含接缝或其他方式

应该是这样的:

/^([a-z0-9]* (([a-z][0-9]) | ([0-9][a-z])) [a-z0-9]*)$/i.

【讨论】:

    【解决方案3】:

    您可以在括号内组合多种类型的字符。因此,以下正则表达式应该可以工作:

    /^([a-z0-9]+)$/i.

    ^ 和 $ 匹配字符串的开头和结尾,因此将测试整个字符串的条件。 [a-z0-9] 使它只匹配字母和数字。 + 使它匹配一个或多个字符。如您所知,最后的“i”使其不区分大小写。

    【讨论】:

    • 与@anubhava 的回答相同的问题。只有字母或数字才能通过验证。
    • 哦,好吧,我错过了那部分。看起来@anubhava 是要走的路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2014-05-24
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多