preg_match允许字母和数字,但至少有一个字母

时间:2017-10-02 19:32:06

标签: regex preg-match

我有以下preg_match语句,允许输入为字母a到z和数字0到9,并且长度必须介于5到30个字符之间。

但是,我怎样才能确保输入不是所有的数字?例如,它必须包含至少1个a到z的字母?

if (preg_match ('/^[a-zA-Z0-9\'.]{5,30}$/i', $str['user'])) {
}

1 个答案:

答案 0 :(得分:3)

你写的你有一个正则表达式,允许输入是字母a到z和数字0到9只,但实际上^[a-zA-Z0-9\'.]{5,30}$匹配一个5到30个ASCII字母的字符串,数字以及'.

如果您只想让正则表达式匹配匹配的内容,而不是仅包含数字的字符串,请使用(?!\d+$)前瞻:

'/^(?!\d+$)[a-z0-9\'.]{5,30}$/i'
   ^^^^^^^^

请注意,如果使用A-Z不区分大小写的标记(只要其中任何一个就足够了),则无需指定a-zi范围。

(?!\d+$)是一个否定前瞻,如果有一个或多个数字后跟字符串末尾($),那么匹配就会失败当前位置(这是字符串的开头)。

请参阅regex demo

如果您不想匹配仅由点组成的字符串,或'或数字,请使用

'/^(?!(?:\d+|([\'.])\1*)$)[a-z0-9\'.]{5,30}$/i'

请参阅another demo