只能输入所需的数字

时间:2019-06-21 12:26:33

标签: javascript regex

我是javascript新手,我要求输入字段可以输入'AND'或123或()。

我尝试过RegExp

function requiredletter(inputtxt) { 
    var letters =/\a+\n+\d/;
    if(inputtxt.value.match(letters)) {
      alert('Your name have accepted : you can try another');
      return true;
    } else {
      alert('Please input alphabet characters only');
      return false;
   }
}

它不能反映出预期的结果。

5 个答案:

答案 0 :(得分:2)

我不知道你在问什么。这是一个整体字符串。

let regex = /^[a-c]{3}[1-3]{3}[\)\(]{2}$/;

console.log(regex.test('abc123)(')) // true
console.log(regex.test('abc123()')) // true
console.log(regex.test('bca123()')) // true
console.log(regex.test('acb231)(')) // true
console.log(regex.test('bac213()')) // true
console.log(regex.test('cab321)(')) // true
console.log(regex.test('abcd123()')) // false

答案 1 :(得分:2)

使用此正则表达式:

ex = /^[a-c]{3}[1-3]{3}[()]{2}$/

const log = e => console.log(e)

const test = s => ex.test(s)

log(test('abc123()')) // true
log(test('bca132)(')) // true
log(test('abce123()')) // false
log(test('abc1234()')) // false
log(test('abc123)(')) // true
log(test('abc123(')) // false

如果提示符合条件,它将返回true,否则将返回false。

答案 2 :(得分:0)

const regex = /^(ABC|123|\(\))$/;

regex.test('ABC'); // true
regex.test('123'); // true
regex.test(123);   // true
regex.test('()');  // true

regex.test('abc'); // false
regex.text(213);   // false
regex.test(')(');  // false

答案 3 :(得分:0)

如果您希望abc123()中所有可能的字母排列,并且不允许它们 在一起,那么您可以使用以下正则表达式:

var reg = /[abc]{3}|[123]{3}|[()]{2}/;
//This will match aaa, abc, bbb, bca, ccc, 123, 213, (), )( , etc...

https://regex101.com/r/44YoW8/2

根据OP在@Kobe's答案中的评论,他希望abc,123和()的任意组合。 如果只需要这些字符(即a,b,c,1、2、3,(和)以及任意数量的这些字母),则可以使用以下正则表达式,可以使用:

/[abc123()]*/

用于检查给定的字符串是否与正则表达式匹配

要进行测试,您需要测试match函数的返回值是否等于实际字符串。考虑以下代码:

test1 = "abcd";
test2 = "abc";
reg = /abc/;
if (test1 == test1.match(reg)) console.log("test1 matched"); //it won't be printed as it doesn't matches completely

if (test2 == test2.match(reg)) console.log("test2 matched"); //this would be printed.

但是,如果您希望在不改变种类的情况下对这些字母,数字和符号进行排列,那么我认为正则表达式将无济于事。参见Regex permutations without repetition。 但是您可以编写一个简单的函数轻松进行此检查。

答案 4 :(得分:0)

基于OP的以下评论 除了所需的任何输入(例如abc,abc123,abc123(),bca,bc123,()或其他),我不需要任何数字。希望您现在了解我的要求。 我为此问题添加了新答案。

据我了解,OP希望接受字符串abc123()中字符的任何排列。我们可以从该字符串中选择任意数量的字符,但是我们不能重复这些字符。因此,从“ a”,“ b”,“ c”到“ abc”,“ bca”,“ 123()”,“(”,“)”,“)(” ...等)的所有内容都是可以接受的。

在这种情况下,正则表达式将无法正常工作,因为正则表达式无法记住诸如使用了哪些字符以及无法再使用哪些字符之类的东西,因此我认为以下功能将可用于此工作(可能不是很算法上高效)

function checkString(str){
      main_str = "abc123()";
    
      for (var i = 0; i<str.length; i++){
        chr = str[i];
        chr1 = chr; //make a copy of character
        if (chr == "(" ||  chr== ")") chr1 = "\\" + chr;
        if (main_str == "") return false;
        if (main_str.match(chr1)) main_str = main_str.replace(chr,''); //remove that character from main_str
        else return false;
      }
      return true;
    
    }
 
//Following are True
console.log(checkString("abc123()"));
console.log(checkString("abc"));
console.log(checkString("bca)("));
console.log(checkString("()"));
console.log(checkString("213"));
console.log(checkString("ab12)"));

//Following are False
console.log(checkString("abc123()a"));
console.log(checkString("abc123()()"));
console.log(checkString("abcd123()"));

此函数的作用是测试给定字符串中的所有字符是否都在abc123()中,并且不重复字符。因此,将接受abcaabc123(),但不接受abcdaaabc1233 ...等。

我希望这能回答您的问题。