如何使用正则表达式对整个字符串进行字段验证?

时间:2012-03-20 16:33:00

标签: regex

我已经工作了很多个小时试图做一个“简单的事情”:使用正则表达式来验证文本字段。

我需要确保:

1-仅使用(a-z),(A-Z)和(0-9)值 2-只在最后添加一个SINGLE通配符。

实施例

匹配

  

米凯*

匹配

  

JAMES

不匹配

  

米凯**

不匹配

  

MIC_HEAL *

我现在有这个正则表达式:

  

[A-ZA-Z0-9 \ S - ]。?+ \ Z *

问题是当我引入无效字符时它仍然匹配,只要我有匹配的子字符串See my REGEX

如何强制整个字符串匹配?我错过了什么?

THX!

3 个答案:

答案 0 :(得分:4)

使用^(行首)和$(行尾)仅匹配整个字符串:

^[a-zA-Z0-9\s-]+.\z*?$

(如果你有多行输入,你也可以使用\A\z - 字符串的开头和结尾)

再来看,我不明白你的正则表达式的结束:.(任何事情)\z * ?(字符串结束,零或更多)次,零或一次)。这个正则表达式将匹配:

Ikdflfdf&

这是对的吗?如果您只想要角色*,则应使用:

^[a-zA-Z0-9\s-]+\*?$

另外,正如罗比指出的那样,你在可接受的字符列表中包含空格和-。如果您只想要字母和数字,则快捷方式将使用\w(单词字符):

^\w+\*$

但是,根据匹配器是否支持Unicode,\w也将匹配非ASCII字母和数字,这可能是您想要的也可能不是。

答案 1 :(得分:4)

试试这个:

^[a-zA-Z0-9]+\*?$

^ string start

$ string end

*是元字符,因此应该像\*一样进行转义,以将其用作字母

答案 2 :(得分:2)

我认为你刚开始需要^而最后需要$

^[a-zA-Z0-9\s-]+.\*?$

此外,您不需要\z

此外,您没有提到要允许空格和短划线-,但您已将它们包含在允许的字符集中。