正则表达式,允许字符和数字,但仅允许最多7位数

时间:2016-06-30 15:16:06

标签: regex validation

我非常感谢以下正则表达式谜语的一些帮助。 我需要正则表达式语句,它将根据以下规则进行验证:     输入可以包含字母,特殊字符和数字。     输入不能以" 0"开头,     输入最多可包含7位数

有效输入的示例:

aa1234aa2.(less than 7 digits)
asd234566 (less than 7 digits)

无效输入的示例:

0asdfd92 (starts with 0)
asd12312311 (more than 7 digits)

到目前为止我尝试了什么:

 ^\D[0-9]{0,7}$, 

对d0000000进行验证,但输入可能是d0d0dddd1234d

如果该部分复杂很多,则可以从要求中删除不能从0开始的部分。最重要的是拥有"最多可以有7位数字"一部分。

此致 奥列格

6 个答案:

答案 0 :(得分:2)

这就是你所需要的!

Attempt 1: ^[1-9]\d{0,6}$
Attempt 2: ^[^0][\d\w]{0,6}$
Attempt 3: ^[^0].{0,6}$
Attempt 4: ^([\D]*\d){0,7}[\D]*$
Attempt 5: ^([\D]*[1-9]){0,7}[\D]*$|^[^0]\d{0,6}$
Attempt 6: ^([\D]*[1-9]){1,7}[\D]*$|^[^0]\d{1,6}$ <- this should work

Example here

答案 1 :(得分:1)

假设Perl(它看起来像Perl正则表达式):

  1. 检查前导零:if (subst($pass, 0, 1) eq '0') { fail }
  2. 检查不超过七位数:if (($pass =~ tr /0-9/0-9/) > 7) { fail }
  3. 我一般反对尝试将所有东西塞进一个正则表达式中,特别是当有其他工具可用于完成这项工作时。在这种情况下,如果存在前导零,则不会执行tr,并且在字符串的开头很容易发现前导零。

    这样做,很容易独立于其他限制添加进一步的限制。例如,“如果它们全部由其他类型的字符分隔,则可能有超过7位数字”(可能是这一个的正则表达式)。

答案 2 :(得分:0)

您可以使用此正则表达式:

^[^0](?:\D*\d){1,7}\D*$

RegEx Demo

这将执行以下验证:

  1. 必须以非零开始
  2. 第一个字符后有1到7位数字

答案 3 :(得分:0)

如果我理解正确的要求,这将有效:

^(?=[^0])(\D*\d){0,7}\D*$

这将允许任何不以零开头并且具有7个或更少数字的字符串。任何数量的任何其他字符都是允许的。

<强>解释

第一部分(?=[^0])是一个断言,它检查以确保字符串不以零开头。其余的匹配任意数量的非数字后跟一个数字,最多7次。然后在字符串结尾之前的任意数量的非数字。

答案 4 :(得分:0)

详细,但诀窍。

(^[1-9][^\d]*([\d]?[^\d]*){0,6}$|^[^\d]+([\d]?[^\d]*){0,7}$)

我发现将RegEx拆分为两种情况比较容易:当字符串以数字开头时,以及何时没有。

答案 5 :(得分:0)

// app/components/modal-dialog.js
import ModalDialog from 'ember-modal-dialog/components/modal-dialog';

export default ModalDialog.extend({
  actions: {
    close() {
      this.sendAction('close', this.get('closeParam'));
    }
  }
});

您可以对其进行测试here