2010-06-28 12 views
14

En mi aplicación, el usuario puede ingresar su propio patrón de expresiones regulares en un cuadro de texto para que pueda forzar cierta entrada para otro usuario/cuadro de texto. ¿Es posible que el usuario vea un ejemplo de una cadena que coincida con la expresión regular que ha ingresado? Por ejemplo, si tuviera que ingresar: ^[A-Z]{2}$, generaría una cadena como "XX" para mostrar al usuario que solo puede ingresar dos letras en mayúscula.¿Es posible generar una cadena de ejemplo basada en un patrón de expresión regular?

Si no hay una manera fácil de lograr esto (y supongo que no), ¿qué tan difícil sería construir? ¿O algo como esto ya existe?

+0

ver http://stackoverflow.com/questions/205411/random-string-that-matches-a-regexp, puede ayudarle. – Shimrod

Respuesta

8

Echa un vistazo Xeger. Parece que puede hacer lo que quieras. Sin embargo, está en Java.

Aquí se muestra un ejemplo del conjunto de pruebas:

@Test 
    public void shouldGenerateTextCorrectly() { 
     String regex = "[ab]{4,6}c"; 
     Xeger generator = new Xeger(regex); 
     for (int i = 0; i < 100; i++) { 
      String text = generator.generate(); 
      assertTrue(text.matches(regex)); 
     } 
    } 

actualización: gracias a Nikos Baxevanis, la dk.brics.automaton haber sido portado a C# en https://github.com/moodmosaic/Fare

+0

Eso es exactamente lo que estoy buscando ... pero para C#. Al menos tengo algo que puedo usar como referencia. – Fusyion

+0

Xeger es solo una delgada envoltura alrededor de http://www.brics.dk/~amoeller/automaton/ que es la implementación de DFA/NFA de algunas operaciones de expresión regular. Tal vez hay algo como eso disponible para C# en alguna parte? –

+1

@MartinWickman Sí, tanto el dk.brics.automaton como las fuentes xeger se han portado a C# en https://github.com/moodmosaic/Fare –

7

para C# es posible que también desee consultar el proyecto Fare. Para más detalles eche un vistazo a this respuesta.

Ejemplo

var regex = @"((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)"; 
var xeger = new Xeger(regex); 

var result = Regex.IsMatch(xeger.Generate(), regex); 
// -> Prints 'true' 
+0

Nikos, sería muy útil si muestra un ejemplo de código usando Fare –

+0

Alberto, acabo de agregar un ejemplo. Espero que ayude. –

0

I una vez que sea necesario tal cosa también, así que creó un programa simple con GUI usando lib xeger mencionado anteriormente. Sólo tiene que ejecutar .jar de la carpeta dist (se requiere JRE) https://github.com/ogyct/SampleFromRegex

Cuestiones relacionadas