正则表达式为序列号,如12345或456789 javascript

时间:2016-06-14 11:33:28

标签: javascript regex

我需要阻止在文本框中输入5个等级序号,如12345,45678等。

我尝试使用以下正则表达式,但它无法正常工作

var   regex = /^\(?[0-9]{3}(\-|\)) ?[0-9]{3}-[0-9]{4}$/;

3 个答案:

答案 0 :(得分:8)

最好对这类任务使用非正则表达式方法。您可以使用 static void getHighScores() { try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException e) { System.out.println("Where is your Oracle JDBC Driver?"); e.printStackTrace(); return; } Connection connection = null; try { connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/xe", "STUDENT", "STUDENT"); } catch (SQLException e) { System.out.println("Connection Failed! Check output console"); e.printStackTrace(); return; } try { Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM HIGHSCORE "); System.out.println("Top Players"); while (rs.next()) System.out.println(rs.getString(1) + " " + rs.getInt(2)); connection.close(); } catch (Exception e) { System.out.println(e); } } 轻松完成此操作。这些模式的正则表达式变得非常复杂且不可读。

 connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/xe", "STUDENT", "STUDENT");

答案 1 :(得分:1)

在搜索功能中使用Tilde (~)运算符的另一种方法。在~上使用-1会将其转换为0。数字0是一个falsy值,这意味着当转换为布尔值时它将计算为false。任何不虚假的东西都是真实的。

const input = 12345;
const pattern = '0123456789012345789';
if (~pattern.indexOf(input))
  console.log('pattern in input');
else
  console.log('pattern not in input');

或者您可以使用includes()方法:

const input = 12345;
const pattern = '0123456789012345789';
if (pattern.includes(input))
  console.log('pattern in input');
else
  console.log('pattern not in input');

答案 2 :(得分:0)

单一的正则表达方式。 (虽然它有点大而且丑陋):

var mRreg = /^\(?(?!.*(?:0\D?1\D?2\D?3\D?4|1\D?2\D?3\D?4\D?5|2\D?3\D?4\D?5\D?6|3\D?4\D?5\D?6\D?7|4\D?5\D?6\D?7\D?8|5\D*6\D*7\D*8\D*9|6\D*7\D*8\D*9\D*0|7\D*8\D*9\D*0\D*1|8\D*9\D*0\D*1\D*2|9\D*0\D*1\D*2\D*3))([0-9]{3})(?:\-|\)) ?([0-9]{3})-([0-9]{4})$/;

if(mRreg.test(input)) 
   console.log('ok');
else 
   console.log('not ok');

这将匹配:

143-457-6543
(555) 234-5556

但是没赢得比赛:

123-456-7890
987-456-7845
(987)456-7890