我有以下preg_match语句,允许输入为字母a到z和数字0到9,并且长度必须介于5到30个字符之间。
但是,我怎样才能确保输入不是所有的数字?例如,它必须包含至少1个a到z的字母?
if (preg_match ('/^[a-zA-Z0-9\'.]{5,30}$/i', $str['user'])) {
}
答案 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-z
或i
范围。
(?!\d+$)
是一个否定前瞻,如果有一个或多个数字后跟字符串末尾($
),那么匹配就会失败当前位置(这是字符串的开头)。
请参阅regex demo。
如果您不想匹配仅由点组成的字符串,或'
或数字,请使用
'/^(?!(?:\d+|([\'.])\1*)$)[a-z0-9\'.]{5,30}$/i'
请参阅another demo。