2012-01-30 49 views
12

que tienen un patrón de expresión regular, lo que valida para un número de tres dígitosJavascript RegEx coincidencia parcial

/^\d{3}$/.test("123") // true 
/^\d{3}$/.test("123.") // false 

quiero usar esta expresión regular como una restricción de entrada en un cuadro de texto.

Básicamente, si el nuevo valor coincide, dejo el carácter escrito, de lo contrario lo evito.

El problema es que ningún valor coincidirá nunca, porque "1" no es una coincidencia completa, y no me permitirá escribirlo.

¿Hay alguna manera de probar una coincidencia parcial para un regEx en javascript?

/^\d{3}$/.test("123") // true 
/^\d{3}$/.test("12") // "partial match" 
/^\d{3}$/.test("a12") // false 

EDITAR

\ d {3} fue sólo un ejemplo. Necesito usar una expresión regular de correo electrónico o una expresión regular de teléfono como restricción de entrada.

"email"  // true 
"[email protected]"  // true 
"[email protected]@"  // false 
"@yahoo.com" // false 

EDIT 2

I tienen un plugin textBox con la restricción de entrada basado en una expresión regular.

La expresión regular puede ser cualquier cosa, un color hex Regex, por ejemplo: (#) {1} ([a-FA-F0-9]) {6}

I necesidad de prevenir usuario que inserte caracteres que no coincide con la expresión regular.

Por ejemplo, si el cuadro de texto está vacío, el primer carácter permitido sería "#".

Pero si pruebo el carácter "#" contra la expresión regular, devolverá "falso", porque "#" en sí mismo no es válido.

/^(#){1}([a-fA-F0-9]){6}$/.test("#") // false 

Pero al mismo tiempo, "#" es parcial válida porque respeta el formato de expresiones regulares (y que debería permitir a los usuarios que escribirla)

Lo que necesito saber es si puedo comprobar si una cadena es una coincidencia parcial de una expresión regular, por lo que puedo permitir que el usuario escriba el carácter.

/^(#){1}([a-fA-F0-9]){6}$/.test("#")  // is a partial match, allow type 
/^(#){1}([a-fA-F0-9]){6}$/.test("#0")  // is a partial match, allow type 
/^(#){1}([a-fA-F0-9]){6}$/.test("#00")  // is a partial match, allow type 
/^(#){1}([a-fA-F0-9]){6}$/.test("#000")  // is a partial match, allow type 
/^(#){1}([a-fA-F0-9]){6}$/.test("#0000") // is a partial match, allow type 
/^(#){1}([a-fA-F0-9]){6}$/.test("#00000") // is a partial match, allow type 
/^(#){1}([a-fA-F0-9]){6}$/.test("#000000") // is a partial match, allow type 
/^(#){1}([a-fA-F0-9]){6}$/.test("#000000D") // is not a match, prevent typing 
+0

¿Tienes respuesta a tus preguntas? – user153

+0

No, no hay respuesta – Catalin

+0

Me enfrento a un problema similar :) – user153

Respuesta

0

Se puede especificar un rango en la expresión para que coincida con cualquier cosa entre uno y tres dígitos, así:

/^\d{1,3}$/.test("1") // true 
/^\d{1,3}$/.test("12") // true 
/^\d{1,3}$/.test("123a") // false 
+0

La expresión regular que usé solo como ejemplo. Normalmente usaré una expresión regular de correo electrónico o una expresión regular de teléfono, y debería permitir al usuario escribir "email @" pero no permitirle escribir "email @@" por ejemplo. – Catalin

0

acaba de proporcionar una expresión regular que permite búsquedas parciales. p.ej. /^\d{1,3}$/

1

Sería mejor utilizar una biblioteca como maskedinput.js. A continuación, puede configuración de entrada el texto como sigue:

jQuery(function($){ 
    $("#your_input").mask("999"); 
}); 

ACTUALIZACIÓN

puede utilizar un validator para las formas y tipos específicos preestablecidos de campos para validar

+0

El complemento de entrada enmascarado jquery se usa para cadenas de tamaño fijo. Necesito algo genérico. – Catalin

+0

@RaraituL, consulte la actualización – epoch

+0

Sí, pero eso es algo diferente. Necesito "validar" la pulsación de tecla no en desenfoque. – Catalin

0

De acuerdo con su última edición, esto debería funcionar:

/^#[a-fA-F0-9]{0,6}$/ 
+0

Sí, pero esto todavía está codificado. Necesito una respuesta "es coincidencia parcial" de una prueba de expresiones regulares. No importa qué tipo de expresión regular se usa. Algo como esto [RegExPlus] (http://codesaway.info/RegExPlus/partial.html) que es para Java. – Catalin

+0

@RaraituL: Vea mi edición, ¿es esto lo que quiere? – Toto

+0

Valida, pero todavía está codificado. Debería poder tener cualquier expresión regular no solo el caso del correo electrónico. Por ejemplo, podría querer tener /^[aZ]{5}@?$/.test("email ") // verdadero , y /^[aZ]{5}@?$/.test("email2 ") // falso – Catalin

1

Se pudo validar parcialmente e la dirección de correo electrónico usando ()? para más letras y/o caracteres. Cada ()? profundiza en el árbol de validación.

El siguiente patrón de expresión regular valida la dirección de correo electrónico letra por letra.

^[a-zA-Z]+(@{1}[a-zA-Z]*(\.{1}[a-zA-Z]*)?)?$ 

No toma en cuenta todas las posibilidades que hay, pero para más básicas, como [email protected] funciona muy bien y no hay espacio para mejorar aún más.

0

Querrá utilizar explícitamente "|" coincidencias parciales. Para su ejemplo coincidencia de color es bastante simple, sólo tiene que coincidir de forma explícita una cadena vacía parcial

/^(|#[a-f0-9]{0,6})$/i.test(inputStr) 

para un correo electrónico que es más complicado, ya que hay combinaciones de los partidos más parciales

/^(|\w+|\[email protected]|\[email protected]\w+|\[email protected]\w+\.|\[email protected]\w+\.\w+)$/.test(inputStr) 

en cuenta que puede No salgas con algo como /^(|\w*@|...)$/ ya que coincide con @blah.com que no es una entrada parcial válida.

Cuestiones relacionadas