我发现这个函数可以检查一个字符串是否只包含字母数字字符:
function test ( value ) {
if( value.match("^[a-zA-Z0-9]*$")){
alert('ok');
}
}
test( 'Somevalue123' );
现在我想改进上述功能以允许一些其他“特殊字符”,例如:
(empty space)
' (single quote)
- (hyphen)
èàùìòÈÀÒÙÌéáúíóÉÁÚÍÓëäüïöËÄÜÏÖêâûîôÊÂÛÎÔç
还有一些符号,比如:
'_', '&', '.', ',', ':', '(', ')', '[', ']', '/', '+', '=', '?', '#', '@'
所以我尝试更新它并且我能够这样做:
function test ( value, numbers, symbols ) {
numbers = ( typeof numbers === 'undefined' ) ? 0 : 1; // default numbers not allowed
symbols = ( typeof symbols === 'undefined' ) ? 0 : 1; // default symbols not allowed
value = value.replace(/è|à|ù|ì|ò|È|À|Ò|Ù|Ì|é|á|ú|í|ó|É|Á|Ú|Í|Ó|ë|ä|ü|ï|ö|Ë|Ä|Ü|Ï|Ö|ê|â|û|î|ô|Ê|Â|Û|Î|Ô|ç/g, '' ); // remove allowed characters before check
// value = value.replace(/...???.../g, '' ); allow white space, single quote and symbols?
if( numbers == 1 && value.match("^[a-zA-Z0-9 ]*$")){ alert('ok'); } // number allowed
else if( value.match("^[a-zA-Z ]*$")){ alert('ok'); } // number not allowed
}
不确定如何允许空格、单引号和符号(使用 Regex 或 value.replace() 对我来说是一样的)。
最佳答案
使用字符类,将所有白名单字符添加到字符类中。
确保通过在连字符 -
前面加上反斜杠 \-
或将其添加到字符类的开头或结尾来转义连字符。
/^[a-zA-Z0-9 èàùìòÈÀÒÙÌéáúíóÉÁÚÍÓëäüïöËÄÜÏÖêâûîôÊÂÛÎÔç'-]*$/
此外,使用 RegExp#test
而不是 String#match
function test(value) {
if (/^[a-zA-Z0-9 èàùìòÈÀÒÙÌéáúíóÉÁÚÍÓëäüïöËÄÜÏÖêâûîôÊÂÛÎÔç'-]*$/.test(value)) {
alert('Ok');
}
}
关于javascript检查字符串是否只包含字母数字字符+其他特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37723380/