2012-02-14 23 views
-4
^[A-Z0-9]*[ _][A-Z0-9]*$ 

space cannot be accepted either at the beginning or end. 
space cannot be accepted at all instead of the value. 
allow numbers and characters in the start and end. 
allow hyphens in the middle not mandatory 

所有这些值都认可的价值观如何写一个正则表达式的JavaScript valiadation

12345 
ABC-12345 
MM 1.8.10 
530715 HS 9JAXXX4100 
020-59898 
HLXU1234 

但是当我键入ABC BCD。它说,这是不正确的匹配

+3

又有什么问题呢? – 2012-02-14 21:38:31

+0

当我键入ABC BCD。它说这是不正确的匹配 – Someone 2012-02-14 21:39:44

+0

*“允许在中间的连字符不是强制性的”*究竟什么可以或不在中间?你是否需要至少一个字符作为开始和结束部分? – 2012-02-14 21:45:31

回答

2
^[^ ]([\w- \.]+)[^ ]$ 

[^ ] =无法启动或空间

([\w- .]+)结束=允许所有字符(或在这种情况下,\ W,连字符,空间和点)

匹配: 美国广播公司BCD

+1

当然,您可以用([A-Z0-9 - \。] +)替换([\ w- \。] +)取决于您的精度要求。 – hexparrot 2012-02-14 21:49:39

1

我认为这是更清晰的正则表达式分为多个。

function validate (str) { 
    if (/^\s|\s$/.test(str)) { // starts or ends with a space 
     return false; 
    } 
    if (/^-|-$/.test(str)) { // starts or ends with a hyphen 
     return false; 
    } 
    return /[\s\w-]+/.test(str); // ensure all valid characters and non-empty 
} 
1

我不是100%肯定你的意思,因为在允许值例如你有

MM 1.8.10

不遵循规则集您指定。

这就是为什么我根据你的榜样价值的模式,这应该工作

^[A-Z0-9]+(?:[ _.-][A-Z0-9]+){0,3}$

说明

^开始匹配的字符串

[A-Z0-9]+比赛开始一个或多个大写字母数字字符,因此空值将失败

(?:开始一个非捕获组,这个组将允许一个分隔符,然后再次至少有一个字母数字大写字符,这是必需的,所以该值必须以字母数字字符开始和结束,分隔符只允许在。

[ _.-]匹配一个空格,下划线,点或连字符

[A-Z0-9]+匹配一个或更多个大写字母数字字符

)关闭非捕获组

{0,3}这允许组被匹配0或最多3次。

$匹配的字符串的末尾

在最后一部分{0,3}$ 3是有只允许至多3个额外的(SO 4总量)由空格分隔大写字母数字字符的分组,下划线,点或连字符,您可以将3更改为您想要的任何数字或将其删除以允许0或无限分组。

示例脚本:

<script type="text/javascript"> 
var strings = [ 
    'ABC BCD', 
    '12345', 
    'ABC-12345', 
    'MM 1.8.10', 
    '530715 HS 9JAXXX4100', 
    '020-59898', 
    'HLXU1234' 
] 
var matches = ''; 
for(i = 0; i < strings.length; i++) { 
    matches += i + ' : ' + strings[i].match(/^[A-Z0-9]+(?:[ _.-][A-Z0-9]+){0,3}$/) + '\n'; 
} 
window.alert(matches); 
</script>