一个匹配包含字母数字、空格和标点符号的字符串的正则表达式

21

我需要一个正则表达式来匹配包含字母、数字、空格和一些简单标点符号(.,!"'/$)的字符串。 我有一个正则表达式 ^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$,它可以很好地匹配字母数字和空格,但不能匹配标点符号。 希望能得到帮助。


2
你想在哪些部分匹配标点符号?你尝试过什么?此外,你有任何样本输入吗? - Wiseguy
为什么不在括号里添加(转义后的)标点符号呢? - Blazemonger
嗯,这个表达式没有标点符号……当然不能工作。学习正则表达式的好资源:http://www.regular-expressions.info/ - Felix Kling
3个回答

38

只需在类别中(方括号内)添加标点符号和其他字符即可:

[A-Za-z0-9 _.,!"'/$]*

这个正则表达式匹配包含空格、下划线、字母数字、逗号、感叹号、引号、美元符号以及其他特殊字符的所有字符串。在添加一些特殊字符时要注意转义: 在这里了解更多


你如何将这个内容适配到 .test() 中? - ac360
你是指像这样(Javascript)吗? var rgx = /[A-Za-z0-9 _.,!"'/$]/; rgx.test("testme"); 还是像这样:/[A-Za-z0-9 _.,!"'/$]/.test("testme") - CaNNaDaRk
我刚刚尝试了这个代码: var r = /[A-Za-z0-9 _.,!"'/$]*/ r.test('¬¬'); 它返回true?我有什么遗漏吗? - Fred Johnson
它返回true,因为它匹配了一个空字符串。虽然正则表达式以结尾(表示“匹配0个或多个”),但它会评估为true,因为它没有找到任何给定的字符。只有当您将该“”更改为“+”(表示1..多个)时,测试函数才会评估为false,如下所示:/[A-Za-z0-9 _.,!"'/$]+/(只需尝试使用exec方法而不是test并查看它匹配什么) - CaNNaDaRk

2

假设您的正则表达式要求字符串中至少有一个字母数字字符,那么我建议使用以下方法:

/^(?=.*[A-Z0-9])[\w.,!"'\/$ ]+$/i

(?=.*[A-Z0-9]) 向前查找,检查是否存在一个ASCII字母或数字;嵌套的字符类包含所有ASCII字母数字,包括下划线 (\w) 和你提到的其他标点符号。斜杠需要转义,因为它也用作正则表达式定界符。 /i 修饰符使正则表达式不区分大小写。


1
<script type="text/javascript">
check("hello dfdf asdjfnbusaobfdoad fsdihfishadio fhsdhf iohdhf");
function check(data){
var patren=/^[A-Za-z0-9\s]+$/;
    if(!(patren.test(data))) {
       alert('Input is not alphanumeric');       
       return false;
    }
    alert(data + " is good");
}
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接