Javascript:使用正则表达式检查字符串是否只有来自另一个字符串的值?
我有一个Javascript:使用正则表达式检查字符串是否只有来自另一个字符串的值?,javascript,regex,string,pattern-matching,match,Javascript,Regex,String,Pattern Matching,Match,我有一个字符字符串,其中包含允许的字符。我想检查另一个字符串(input),如果它只有字符中的值 我不知道这是否可能,但正在寻找一种解决方案,它使用regex和match()来确定输入是否只允许使用字符 您可以使用构造函数从字符串创建regexp: function validStringUnsanitized(allowed, str) { var re = new RegExp("^[" + allowed + "]+$"); return re.test(str); }
字符
字符串,其中包含允许的字符。我想检查另一个字符串(input
),如果它只有字符中的值
我不知道这是否可能,但正在寻找一种解决方案,它使用regex
和match()
来确定输入是否只允许使用字符 您可以使用构造函数从字符串创建regexp:
function validStringUnsanitized(allowed, str) {
var re = new RegExp("^[" + allowed + "]+$");
return re.test(str);
}
> validStringUnsanitized('abx', 'abx');
true
> validStringUnsanitized('abx', 'ght');
true
但是,如果您想允许使用特殊字符,则需要对允许的字符进行清理。否则会得到不想要的结果:
// the regex becomes [ab-x] which is from a to x
> validStringUnsanitized('ab-x', 'ghai');
true
> validStringUnsanitized(']ab', 'ab');
false
所以你必须摆脱这样的角色:
function validString(allowed, str) {
var sanitized = allowed.replace(/([\]\-\\])/g, '\\$1')
var re = new RegExp("^[" + sanitized + "]+$");
return re.test(str);
}
> validString(']ab-x\\[', 'abxaabbx');
true
> validString(']ab-x\\[', 'ab-\\xb[]ab');
true
> validString(']ab-x\\[', 'ghai');
false
您可以使用构造函数从字符串创建regexp:
function validStringUnsanitized(allowed, str) {
var re = new RegExp("^[" + allowed + "]+$");
return re.test(str);
}
> validStringUnsanitized('abx', 'abx');
true
> validStringUnsanitized('abx', 'ght');
true
但是,如果您想允许使用特殊字符,则需要对允许的字符进行清理。否则会得到不想要的结果:
// the regex becomes [ab-x] which is from a to x
> validStringUnsanitized('ab-x', 'ghai');
true
> validStringUnsanitized(']ab', 'ab');
false
所以你必须摆脱这样的角色:
function validString(allowed, str) {
var sanitized = allowed.replace(/([\]\-\\])/g, '\\$1')
var re = new RegExp("^[" + sanitized + "]+$");
return re.test(str);
}
> validString(']ab-x\\[', 'abxaabbx');
true
> validString(']ab-x\\[', 'ab-\\xb[]ab');
true
> validString(']ab-x\\[', 'ghai');
false
试试看。当测试字符串仅包含允许的字符时,Success将为true。这是区分大小写的
var allowedCharacters = "abcdefghijklmnopqrstuvwxyz";
var regex = new RegExp("^[" + allowedCharacters + "]*$");
var testString = "abc#@#";
var success = regex.test(testString);
对于区分大小写的情况,请将相应的线路更换为以下内容。这将添加一个正则表达式修饰符
var regex = new RegExp("^[" + allowedCharacters + "]*$", "i");
如果allowedCharacters变量中有特殊字符,则必须使用双斜杠对其进行转义。因此,为了允许使用方括号字符,您必须使用
var allowedCharacters = "abc\\[";
这是因为第一个反斜杠用于字符串转义,第二个反斜杠用于使其成为正则表达式中的转义。
试试看。当测试字符串仅包含允许的字符时,Success将为true。这是区分大小写的
var allowedCharacters = "abcdefghijklmnopqrstuvwxyz";
var regex = new RegExp("^[" + allowedCharacters + "]*$");
var testString = "abc#@#";
var success = regex.test(testString);
对于区分大小写的情况,请将相应的线路更换为以下内容。这将添加一个正则表达式修饰符
var regex = new RegExp("^[" + allowedCharacters + "]*$", "i");
如果allowedCharacters变量中有特殊字符,则必须使用双斜杠对其进行转义。因此,为了允许使用方括号字符,您必须使用
var allowedCharacters = "abc\\[";
这是因为第一个反斜杠用于字符串转义,第二个反斜杠用于使其成为正则表达式中的转义。您可以使用此函数完成此操作
你可以用这个函数来实现
在你希望避免使用正则表达式的情况下,你可以考虑一些类似的事情:
var valid_chars = ['a', 'e', 'i', 'o', 'u', 'y'],
ret;
//or valid_chars = string.split('');
ret = isValid('test', valid_chars); //false
ret = isValid('aeyaa', valid_chars); //true
ret = isValid('aeyaab', valid_chars); //false
function isValid(input, check)
{
if (typeof input === 'string')
input = input.split('');
if (typeof check === 'string')
check = input.split('');
if (typeof input !== 'object')
{
console.log('isValid() failed: input not array');
return;
}
if (typeof check !== 'object')
{
console.log('isValid() failed: check not array');
return;
}
for (var x = 0; x < input.length; ++x)
{
var char_isvalid = false;
for (var y = 0; y < check.length; ++y)
{
if (input[x].toLowerCase() === check[y].toLowerCase())
{
char_isvalid = true;
break;
}
}
if (! char_isvalid)
{
return false;
}
}
return true;
}
var valid_chars=['a','e','i','o','u','y'],
ret;
//或有效字符=string.split(“”);
ret=有效('测试',有效字符)//假的
ret=有效('aeyaa',有效字符)//真的
ret=有效('aeyaab',有效字符)//假的
函数有效(输入,检查)
{
如果(输入类型==='string')
输入=输入。拆分(“”);
如果(检查类型=='string')
检查=输入。拆分(“”);
if(输入类型!=='object')
{
log('isValid()失败:输入不是数组');
返回;
}
如果(检查类型!==“对象”)
{
log('isValid()失败:检查非数组');
返回;
}
对于(变量x=0;x 如果你希望避免使用正则表达式,你可以考虑如下:
var valid_chars = ['a', 'e', 'i', 'o', 'u', 'y'],
ret;
//or valid_chars = string.split('');
ret = isValid('test', valid_chars); //false
ret = isValid('aeyaa', valid_chars); //true
ret = isValid('aeyaab', valid_chars); //false
function isValid(input, check)
{
if (typeof input === 'string')
input = input.split('');
if (typeof check === 'string')
check = input.split('');
if (typeof input !== 'object')
{
console.log('isValid() failed: input not array');
return;
}
if (typeof check !== 'object')
{
console.log('isValid() failed: check not array');
return;
}
for (var x = 0; x < input.length; ++x)
{
var char_isvalid = false;
for (var y = 0; y < check.length; ++y)
{
if (input[x].toLowerCase() === check[y].toLowerCase())
{
char_isvalid = true;
break;
}
}
if (! char_isvalid)
{
return false;
}
}
return true;
}
var valid_chars=['a','e','i','o','u','y'],
ret;
//或有效字符=string.split(“”);
ret=有效('测试',有效字符)//假的
ret=有效('aeyaa',有效字符)//真的
ret=有效('aeyaab',有效字符)//假的
函数有效(输入,检查)
{
如果(输入类型==='string')
输入=输入。拆分(“”);
如果(检查类型=='string')
检查=输入。拆分(“”);
if(输入类型!=='object')
{
log('isValid()失败:输入不是数组');
返回;
}
如果(检查类型!==“对象”)
{
log('isValid()失败:检查非数组');
返回;
}
对于(变量x=0;x
您需要注意此处的特殊字符(例如,allowed=“ab-x”
),我不知道,但它似乎对我不起作用。允许的字符为abcdefghijklmnopqrstuvwxyz
,但是如果testString
为abc@
,则返回true:(有什么问题吗?还有一个问题,我是否需要在所有特殊字符之前使用双黑斜杠?例如:abc\\!\\?\\\\\\\\\(\\)
?您需要注意此处的特殊字符(例如allowed=“ab-x”
)我不知道,但它似乎对我不起作用。允许的字符是abcdefghijklmnopqrstuvwxyz
,但是如果testString
是abc@
(有什么问题吗?还有一个问题,我需要在所有特殊字符之前使用双黑斜杠吗?例如:abc\!\?\\\\\\\\\\\\\\\(\)
?