如何为javascript验证编写正则表达式

时间:2012-02-14 21:36:57

标签: javascript regex

^[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

所有这些值都是可接受的值

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

但是当我输入ABC BCD时。它说它不匹配

3 个答案:

答案 0 :(得分:2)

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

[^ ] =无法以空格开头或结尾

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

匹配: ABC BCD

答案 1 :(得分: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
}

答案 2 :(得分: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个额外的(因此总共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>